matlab的ind2sub函数到底返回的是什么?
在命令窗口输入:
>> A=[4 7 2 9 8;3 9 1 4 3;1 5 9 6 4;8 3 7 1 0]
A =
4 7 2 9 8
3 9 1 4 3
1 5 9 6 4
8 3 7 1 0
则A中每个元素对应的索引如下(MATLAB中数据是按列的方式存储的):
1 5 9 13 17
2 6 10 14 18
3 7 11 15 19
4 8 12 16 20
ind=sub2ind(siz,I,J):siz表示要转换的矩阵的行列数,I是要转换矩阵的行标,J是要转换矩阵的列标。I,J的行列数必须相同。ind为输出参数,其行列数与I,J相同。ind即为索引。
在命令窗口中输入:
>> ind=sub2ind(size(A),[1,2;3,4],[1,1;2,2])
则显示
ind =
1 2
7 8
从运算结果可以看出,在矩阵A中,下标(1,1)的索引值为1,下标(2,1)的索引值为2,下标(3,2)的索引值为7,下标(4,2)的索引值为8
matlab数组中元素引用有三种方式:
1.索引 就是由一个整数表示数组中的某一数据,按照列进行排列
2.下标 如果是二维,就是行号和列号
3.布尔数
sub2ind就是将下标转换为索引 !
ind2sub函数就是在指定矩阵尺寸(size)前提下将给定的index转化成行列形式
matlab数组中元素引用有三种方式:
1.索引 就是由一个整数表示数组中的某一数据,按照列进行排列
2.下标 如果是二维,就是行号和列号
3.布尔数
sub2ind就是将下标转换为索引 !
ind2sub函数就是在指定矩阵尺寸(size)前提下将给定的index转化成行列形式
按照您给的例子来看,
A =
1 2 3
4 5 6
因为matlab中矩阵按照列进行排列,所以对应元素的索引为:
A =
1 3 5
2 4 6
也就是说,按列进行索引。所以你上面的例子,
[i,j]=ind2sub(size(A),3)
是想找出索引位置为3的数值,对应的行列编号是怎么样,因为索引为3的元素2在矩阵的第1行第2列,所以返回i=1,j=2,也就是返回的行标和列标。
一般都是返回两个值的,用来接收行标和列标,返回一个参数的情况下,好像没有什么意义哦。
希望可以帮助你!望采纳!
ind2sub和sub2ind这对函数,是互逆的一对函数。ind2sub把数组或者矩阵的线性索引转化为相应的下标;sub2ind则正好相反,将下标转化为线性索引。
ind2sub的函数参考:
[plain] view plaincopy
[I,J] = ind2sub(siz,IND)
[I1,I2,I3,...,In] = ind2sub(siz,IND)
sub2ind的函数参考:
[plain] view plaincopy
linearInd = sub2ind(matrixSize, rowSub, colSub)
linearInd = sub2ind(arraySize, dim1Sub, dim2Sub, dim3Sub, ...)
上述的函数参考中,第一个都是二维的情况,第二个扩展到了多维空间。一维的数组就没必要使用这两个函数了,一维的下标本来就是线性索引。
从这个例子中我们看到,MATLAB中的数组是按照列排列的,使用的时候要注意一点。多维的使用和上述类似。
ind2sub的用法也类似
这里说明一点,ind2sub和sub2ind仅仅是下标的转换操作,实际使用中还会强扯到其他的函数,如find, size之类的。
首先你要理解这个函数是干什么。ind2sub函数是将线性索引转成对应维数的索引值。
说通俗点就是把内存中第几个数在矩阵中对应坐标找出来。
matlab里边数是按照列存储的。按照你给的这个例子。
A=[1,2,3
4,5,6];
也就是说在存储器中,内存里的第一个数是1,第二个是4,第三个是2,第四个是5……
你的命令[i,j]=ind2sub(size(A),3)就是求第三个元素对应的行、列索引值(即矩阵中的位置)。
显然第三个数是2,位于第1行、第2列,所以i=1,j=2。因为你给的A是一个2维的,所以要用两个参数来接收返回值。
还有三维的、四维的……
---------------------------------------space----------------------------------------
第二个问题为什么ans=3。
这个函数是可以有不同形式输出的。如果你给的参数小于给定矩阵的维数,他就会先将这个矩阵降维,然后给你坐标。
也就是说你只给一个输出,就会得到她一维对应的位置。很显然第3个数对应的就是列向量的第三个哦~所以返回就是3,这样没有什么实际意义~
返回值为索引值,即IND的元素在该二维数组内的行列下标
函数功能:在FreeMat、Matlab中,该函数用于把数组中元素索引值转换为该元素在数组中对应的下标
语法格式:[I,J] = ind2sub(siz,IND)
这种调用格式适用于二维数组,其中siz是数组的尺寸,通常通过调用size函数获取
MATLAB以列向量形式存储矩阵,例如:A=[1 2 3;4 5 6;7 8 9]的存储形式是[1 4 7 2 5 8 3 6 9]'
所以从下标(i,j)得到索引index的方法是 index=(j-1)*M+i,M为二维矩阵的行数
反过来,就可以从索引得到下标。rem为取余数,得到元素所在行数,floor取整,得到元素所在列数。
例如4x3的二维矩阵,如果索引为 3,对应的下标是(rem(3-1,4)+1,floor((3-1)/4+1)),即(3,1)
同理,索引为4 5 6,对应下标为(4,1),(1,2),(2,2)。
对于三维和高维矩阵,同样的道理,就是从列到行,再到更高的维度。
matlab中find 函数如何使用
matlab很常用,下面是find()函数的所有用法:1、 b=find(a),a是一个矩阵,查询非零元素的位置,如果X是一个行向量,则返回一个行向量,否则,返回一个列向量。如果X全是零元素或者是空数组,则返回一个空数组,例子如下所示,也可以用b=find(a>2),这句的意思是在a中找到比较2大的元素;2、b...
关于matlab中多维数组某一单元物理存放位置的计算
而matlab其实也提供函数实现子下标sub和总下标ind之间的转化 IND = sub2ind(siz,I,J,...) 当然I J K不能超过那一维的最大值 [I,J,...] = ind2sub(siz,IND) 当然 IND不能超过矩阵的元素总个数 其中sub2ind基本原理大概就是利用你那个(a-1)*d2*d3+(b-1)*d3+c公式计算出储存位置 ...
matlab如何做灵敏度分析?(详细)
clc hold off sample of size N N=100;sample generation x1=rand(N,1)-0.5;x2=rand(N,1)-0.5;x3=rand(N,1)-0.5;plot(x1,x2,'o')hold on plot(x1,x3,'o')model evaluations y=4*x1.^2+3*x2+x3;set n. of stripes r=10;for i=1:r t=(i-1)\/r-0.5;ind=find...
MATLAB函数ind2vec的作用
ind2vec则反过来理解即可,如一个索引适量A=[1 3 2 2 2 1 2 1],求ind2vec?从A可以看出A是1行8列的(如果实在不知道,就用size(A)查看),从A中元素最大值"3"可以看出,索引对应的向量是3行的,还不理解?那就用最基本的方法,因A中元素对应的是行号,设B=ind2vec(A),意味着B(1...
matlab怎么只画数据中的一部分?
因为不清楚你的数据是怎么存放的。给你举个例子 你可以顺序遍历你的数据一遍 --- | 假设你的数据是x和y两个向量 | | 你原来的图是plot(x,y)画的 | --- 那么你可以这样实现 for i=1:length(x)if x(i)<2e5&&x(i)>-2e5 plot(x(i),y(i))hold on end end ...
matlab中如何实现两个三维曲面图的重叠部分的叠加?希望大神说下思路...
ind=find(x1==x2 && y1==y2);z1(ind)=z1(ind)+z2(ind);z2(ind)=NaN;
matlab中tol=1e-7是什么意思,最好详细点
ind = eig_order(end); %ind是下标 x = V(:, ind); %矩阵中的下标 x = x .\/ sqrt(sum(A, 2)); %x点除以矩阵A每一行的和的开二次方 lambda = lambdas(ind, ind) - 1; %Lambda函数又称匿名函数
matlab如何生成一个0,1数组(数组中只有0或者1),但是生成的1的个数为...
N个元素的数组里包含x个1N = 100;x = 5;a = zeros(N,1);ind = randi(N, [x,1]);% 给出x个随机值作为索引a(ind) = 1;find(a==1)% 验证是否5个1%% MxN的矩阵中包含x个1M = 100;N = 200;x = 5;a = zeros(M,N);ind = randi(M*N, [x,1]);% 给出x个随机值作为...
MATLAB中删除相应行的数据
实际上如果b和a有同样的行数 a(B<5,:)=[];删除a中的行之后 也可以用 b(B<5,:)=[];删除b中对应的行 实际你可以用一个变量保存 例如 C=(B<5), C也是个逻辑数组 然后 a(C,:)=[];b(C,:)=[];如果要确切知道,要删除的行的行号,可以用find函数 ind=find(C);或者不保存C,...
MATLAB如何取数组中非零的最小值,数组里面都是正数。
代码如下:a=magic(6);disp(a)for i=1:1:6 B=a(i,:);disp(B)[b,ind]=min(B(find(B~=0)));disp(b)disp(ind)for j=1:1:6 c=100;disp(c)end end
革静高锰:[答案] [i,j]=ind2sub([3 3],5) % 3*3矩阵的第 5个元素的全下标;单下标转变为多下标 ind=sub2ind([3 3],3,3) %矩阵第三行、第三列元素的序号
阜新市15285209185: MATLAB如何进行数组扩维 - ?
革静高锰: matlab多维数组操作1.一个三维数组由行、列和页三维组成,其中每一页包含一个由行和列构成的二维数组. 2.利用标准数组函数创建多维数组 A=zeros(4,3,2) 生成一个4行3列2页的三维全0数组,ones,rand和randn等函数有相似的用法. 3.利...
阜新市15285209185: matlab如何创建多维数组 - ?
革静高锰: 创建多维数组示例:>>A(3,3,3)=1%创建3*3*3数组,未赋值元素默认设置为0A(:,:,1)=000000000A(:,:,2)=000000000A(:,:,3)=000000001>>B(3,4,:)=1:4%创建3*4*4数组B(:,:,1)=000000000001B(:,:,2)=000000000002B(:,:,3...
阜新市15285209185: MATLAB怎么创建m*n的结构数组 - ?
革静高锰: 借助你的信息,给你举个例子做参考,A{1,1}=s(1);A{1,2}=s(2);A{2,1}=s(3);A{2,2}=s(4);%组建2*2数组 >> A下面是结果:A = [1x1 struct] [1x1 struct][1x1 struct] [1x1 struct]
阜新市15285209185: matlab中多维数组存储方式 - ?
革静高锰: 1.一个三维数组由行、列和页三维组成,其中每一页包含一个由行和列构成的二维数组. 2.利用标准数组函数创建多维数组 A=zeros(4,3,2) 生成一个4行3列2页的三维全0数组,ones,rand和randn等函数有相似的用法. 3.利用直接索引方式生成多维数组A=zeros(2,3)A(:,:,2)=ones(2,3)A(:,:,3)=4 上面的代码先生成一个二维数组作为三维数组的第一页,然后通过数组直接索引,添加第二页、第三页.
阜新市15285209185: 在matlab里怎么提取某一项特定的值 - ?
革静高锰: A=rand(3) B=rand(3) C=A>B %得到0,1序列矩阵index=find(C==1) %得到1序列的一维角标[row,col]=ind2sub(3,index) %这里的3是矩阵的行数.得到的col为列数.
阜新市15285209185: 为什么用sub2ind函数总是出错 求帮助 - ?
革静高锰: matlab数组中元素引用有三种方式: 1.索引 就是由一个整数表示数组中的某一数据,按照列进行排列 2.下标 如果是二维,就是行号和列号 3.布尔数 sub2ind就是将下标转换为索引 ! ind2sub函数就是在指定矩阵尺寸(size)前提下将给定的index转化
阜新市15285209185: matlab 很简单的小问题 - ?
革静高锰: 在安装的选择工具箱的时候,有提示,有些工具箱需要用到其他工具箱中的函数,一起安装就可以了.Matlab2011A的最小安装:- MATLAB Distributed Computing Server 5.1- MATLAB Builder EX 2.0- MATLAB Builder JA 2.2.2- MATLAB Builder NE 4.0- MATLAB Coder 2.0- MATLAB Compiler 4.15- MATLAB Report Generator 3.10
阜新市15285209185: matlab中如何求一个数组的最小值的下标? - ?
革静高锰: 代码如下:int min(int a[], int number) {int min=a[0]; int i=0; for(int i=0;i<number;i++) { if(min>a[i]) { min=a[i]; } } return min; } 扩展资料:注意事项 Python的min函数返回列表中的最小的项.返回列表中最小的项的索引 def indexofMin(arr): minindex...
阜新市15285209185: matlab5*5*5多维数组建立 - ?
革静高锰: 你可以用直接赋值的方法,也可以用生成随机数组的方法. 具本下面代码: A(5,5,5) = 1 B = rand(5,5,5)