Matlab学习笔记(四)

Indexing

Matrix Indexing

Accessing Single Elements

可以使用如下语法来调用一个矩阵(Matrix)中的一个特定的元素:

A(row,column):A是变量名,行在前,列在后。例如:

A = magic(4)
A =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1
A(4, 2)
ans =
    14

Linear Indexing

我们也可以只使用一个下标(subscript)来索引一个矩阵(matrix)的元素:A(k)。MATLAB存储矩阵(matrix)和数组(arrays)是以列来存储的,例如:

A = [2 6 9; 4 2 8; 3 5 1]
A =
     2     6     9
     4     2     8
     3     5     1

它在内存中的存储序列为:

2, 4, 3, 6, 2, 5, 9, 8, 1

所以如果我们想要索引第三行第二列的元素,我们可以使用A(3,2)或者使用A(6)。

如果我们提供了多个下标(subscripts),MATLAB依据要索引的数组来以列计算所要索引的元素的位置。例如,有一个二维数组A,它的大小为[d1,d2],如果我们提供两个下标(i,j),那么偏移量(offset)为:

(j-1)*d1+i

Functions That Control Indexing Style

可以使用sub2ind来把行列下标(row-column subscript)变成线性下标(linear subscript):

A = [2 6 9; 4 2 8; 3 5 1];

linearindex = sub2ind(size(A), 3, 2)
linearindex =
     6

反之使用ind2sub函数:

[row col] = ind2sub(size(A), 6)
row =
     3
col =
     2

Accessing Multiple Elements

对于一个4*4的矩阵,计算第4列的元素的和,可以像下面这样:

A = magic(4);
A(1,4) + A(2,4) + A(3,4) + A(4,4)

我们可以使用colon operator来代替:

A(1:m, n)

该式计算矩阵A的第n列元素的和。我们根据这个,可以算出矩阵A的所有元素的和:

sum(A(1:4, 4))

Nonconsecutive Elements

为了索引不相邻的元素,可以使用colon operator并且加上间隔值(step value):

B = A;

B(1:3:16) = -10
B =
   -10     2     3   -10
     5    11   -10     8
     9   -10     6    12
   -10    14    15   -10

MATLAB支持使用数组索引,也就是说索引可以是一个数组:

A = 5:5:50
A =
     5    10    15    20    25    30    35    40    45    50
B = [1 3 6 7 10];

A(B)
ans =
     5    15    30    35    50

如果用一个矢量来索引一个矢量(vector),那么输出结果的形式和索引的形式是一样的:

A(B‘)
ans =

     5    15    30    35    50
A1 = A‘; A1(B)
ans =

     5
    15
    30
    35
    50

如果用一个非矢量来索引一个矢量,那么输出结果的形式和索引的形状和大小一样:

C = [1 3 6; 7 9 10];
A(C)
ans =

     5    15    30
    35    45    50

The end Keyword

MATLAB提供了一个关键字end来表示任意维数组的最后一个元素,这在编程的时候特变有用,当不知道数组的大小的时候就可以使用这个。

B(1:3:end) = -10

Specifying All Elements of a Row or Column

sum(A(:, 2))
ans =
    34

用colon operator来代替linear indexing中的下标,就代表所有的元素:

A(:)
ans =
    16
     5
     9
     4
     .
     .
     .
    12
     1

Using Logicals in Array Indexing

一个逻辑数组的结果是来自数组A,这些值是基于他们在索引数组B中的位置,而不是他们的值。在这种运算中,每一个在索引数组(indexing array)中true的元素,才能够被当做位置索引(positional index)被处理。

在下面的例子中,B是一个0、1逻辑矩阵,这些元素在B中的位置决定了A中的哪些元素能够被表达式A(B)处理:

A = [1 2 3; 4 5 6; 7 8 9]
A =
     1     2     3
     4     5     6
     7     8     9

B = logical([0 1 0; 1 0 1; 0 0 1]);
B =
     0     1     0
     1     0     1
     0     0     1

A(B)
ans =
     4
     2
     6
     9

find函数对于逻辑数组(logical arrays)而言是非常有用的,它返回逻辑数组中非零元素的线性索引(linear indices):

find(B)
ans =
     2
     4
     8
     9

应用例子:

这个例子创建了一个逻辑数组B,它满足条件:A>0.5。A使用B中元素的位置来处理索引:

rng(0,‘twister‘);     % Reset the random number generator
A = rand(5);
B = A > 0.5;
A(B) = 0
A =

         0    0.0975    0.1576    0.1419         0
         0    0.2785         0    0.4218    0.0357
    0.1270         0         0         0         0
         0         0    0.4854         0         0
         0         0         0         0         0

另一个简单的表达式是:

A(A > 0.5) = 0

:

这个例子用来标注素数,并且令非素数为0:

A = magic(4)
A =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

B = isprime(A)
B =
     0     1     1     1
     1     1     0     0
     0     1     0     0
     0     0     0     0

A(~B) = 0;                       % Logical indexing

A
A =
     0     2     3    13
     5    11     0     0
     0     7     0     0
     0     0     0     0
find(B)
ans =
     2
     5
     6
     7
     9
    13

Logical Indexing with a Smaller Array

在大多数情况下,逻辑索引数组(logical indexing array)应该和被要索引的数组应大小相等,但是这不是必须的,有时可以更小,但是不能更大:

A = [1 2 3;4 5 6;7 8 9]
A =
     1     2     3
     4     5     6
     7     8     9

B = logical([0 1 0; 1 0 1])
B =
     0     1     0
     1     0     1

isequal(numel(A), numel(B))
ans =
     0

A(B)
ans =
     4
     7
     8

MATLAB对于逻辑索引数组中那些没有的元素自动补零:

% Add zeros to indexing array C to give it the same number of
% elements as A.
C = logical([B(:);0;0;0]);

isequal(numel(A), numel(C))
ans =
     1

A(C)
ans =
     4
     7
     8

比较可以知道,两者结果是一样的。

时间: 2024-10-11 17:17:13

Matlab学习笔记(四)的相关文章

Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能

Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能 说一下IHandle<T>实现多语言功能 因为Caliburn.Micro是基于MvvM的UI与codebehind分离, binding可以是双向的所以我们想动态的实现多语言切换很是方便今天我做一个小demo给大家提供一个思路 先看一下效果 点击英文  变成英文状态点chinese就会变成中文                          源码的下载地址在文章的最下边 多语言用的是资源文件建

代码管理工具 --- git的学习笔记四《重新整理git(1)》

1.创建版本库 mkdir  创建目录 cd  地址,到该地址下 pwd 显示当前目录 1.创建目录 $ mkdir startGit $ cd startGit $ pwd 显示当前目录 或者cd到桌面,然后再创建目录 2.初始化版本库 $ git init 初始化仓库 提示信息:Initialized empty Git repository in /Users/xingzai/Desktop/startGit/.git/ 建立一个空的git仓库在/Users/xingzai/Desktop

Linux学习笔记四:Linux的文件搜索命令

1.文件搜索命令  which 语法:which [命令名称] 范例:$which ls  列出ls命令所在目录 [[email protected] ~]$ which ls alias ls='ls --color=auto' /bin/ls 另外一个命令:whereis [名称名称],也可以列出命令所在目录. [[email protected] ~]$ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/ma

小猪的数据结构学习笔记(四)

小猪的数据结构学习笔记(四) 线性表之静态链表 --转载请注明出处:coder-pig 本章引言: 在二,三中中我们分别学习了顺序表中的线性表与单链表,线性表有点类似于 我们前面所学的数组,而单链表使用的最多的是指针,这里问个简单的问题, 如果是在以前没有指针的话,前辈先人们怎么实现单链表呢?大家思考下! 没有指针,那么用什么来代替呢?前辈先人们非常机智,想出了使用下标+游标的方式 来实现单链表的效果!也就是今天要讲的--静态链表! 当然你也可以直接跳过本章,因为有了单链表就没有必要用静态链表了

Swift学习笔记四:数组和字典

最近一个月都在专心做unity3d的斗地主游戏,从早到晚,最后总算是搞出来了,其中的心酸只有自己知道.最近才有功夫闲下来,还是学习学习之前的老本行--asp.net,现在用.net做项目流行MVC,而不是之前的三层,既然技术在更新,只能不断学习,以适应新的技术潮流! 创建MVC工程 1.打开Visual studio2012,新建MVC4工程 2.选择工程属性,创建MVC工程 3.生成工程的目录 App_Start:启动文件的配置信息,包括很重要的RouteConfig路由注册信息 Conten

NLTK学习笔记(四):自然语言处理的一些算法研究

自然语言处理中算法设计有两大部分:分而治之 和 转化 思想.一个是将大问题简化为小问题,另一个是将问题抽象化,向向已知转化.前者的例子:归并排序:后者的例子:判断相邻元素是否相同(与排序). 这次总结的自然语言中常用的一些基本算法,算是入个门了. 递归 使用递归速度上会受影响,但是便于理解算法深层嵌套对象.而一些函数式编程语言会将尾递归优化为迭代. 如果要计算n个词有多少种组合方式?按照阶乘定义:n! = n*(n-1)*...*1 def func(wordlist): length = le

Android学习笔记四:添加Source

问题描述 Source not foundThe JAR file D:\.....\sdk\platforms\android-20\android.jar has no source attachment. 问题原因及解决办法 1. 使用SDK Manager下载最新版本的Sources for Android SDK 一般文件下载目录默认在SDK下的sources文件中即 \adt-bundle-windows-x86_64-20130522\sdk\sources\android-20

【Unity 3D】学习笔记四十二:粒子特效

粒子特效 粒子特效的原理是将若干粒子无规则的组合在一起,来模拟火焰,爆炸,水滴,雾气等效果.要使用粒子特效首先要创建,在hierarchy视图中点击create--particle system即可 粒子发射器 粒子发射器是用于设定粒子的发射属性,比如说粒子的大小,数量和速度等.在创建完粒子对象后,在右侧inspector视图中便可以看到所有的粒子属性: emit:是否是使用粒子发射器. min size:粒子最小尺寸. max size:粒子最大尺寸. min energy:粒子的最小生命周期

WEB前端学习笔记 四

接上一篇,web学习笔记 四,在此感谢您对此篇笔记的认可,但转发时请注明文章出自网知博学. 2.0  html的语法格式 html的标签要写在尖括号中 :<> 在在英文输入法状态下,按住shift键然后再按它左侧的尖括号就可了, 先学习一个简单的h1标签,是个标题标签,在html中这样写: <h1>我在h1标签中,我就是标题</h1> 那么h1标签中所包裹的文字,就标记成标题了.通过浏览器的解析后在页面上显示出来的效果就是字体加粗,加黑,和word中的标题性质一样! 大

初探swift语言的学习笔记四(类对象,函数)

作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/29606137 转载请注明出处 假设认为文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! swift扩展了非常多功能和属性,有些也比較奇P.仅仅有慢慢学习,通过经验慢慢总结了. 以下将初步学习一下类的写法. 码工,最大爱好就是看码,而不是文字,太枯燥. // // computer.swift // swiftDemo // // C