-
2021-04-21 13:47:45
1.Matlab中数组元素引用有三种方法
1.下标法(subscripts)
2.索引法(index)
3.布尔法(Boolean)
注意:在使用这三种方法之前,大家头脑一定要清晰的记住,Matlab中数组元素是按列存储(与Fortran一样),比如说下面的二维数组
A=
8 1 6
3 5 7
4 9 2
Matlab的存储顺序是8,3,4,1,5,9,6,7,2,也就是说先行后列,对于3维数组呢,就是先行后列再页对应个元素的索引和下标分别为
Element Index Subscripts
8 1 (1,1)
3 2 (2,1)
4 3 (3,1)
1 4 (1,2)
5 5 (2,2)
9 6 (3,2)
6 7 (1,3)
7 8 (2,3)
2 9 (3,3)
从上面的例子中已经很清晰的说明了下标和索引的区别了,也就是说Matlab为每个元素分配了一个唯一识别的ID(即index)
2.下标法引用A(ii,jj):其中ii和jj可以是一维向量、标量、“:”号或者“end”大家对下标估计比较熟悉,由于在C语言中接触过,但是我这里需要强调的是,Matlab的下标是可以多行多列同时引用的,而像C语言等一次只能引用一个,比如
A(2:3,3:-1:1)表示引用数组中的2~3行,3~1列对应的元素
A(:,end)表示引用最后一列元素,“:”表示所有列或行,“end”表示最后一列或列,“end-n”表示倒数第n行或列
A(1,end-1)表示引用第1行倒数第2个元素
A([2 1 3 3],[1 1 2 2 1])表示引用按两个向量引用指定的元素,即A中的第2,1,3,3行和第1,1,2,2,1列对应的元素
举几个例子:
>>A=magic(3)
A =
8 1 6
3 5 7
4 9 2
>>A(2:3,3:-1:1)
ans =
7 5 3
2 9 4
>>A(:,end)
ans =
6
7
2
>>A(1,end-1)
ans =
1
>>A([2 1 3 3],[1 1 2 2 1])
ans =
3 3 5 5 3
8 8 1 1 8
4 4 9 9 4
4 4 9 9 4
2.索引法引用(说白了索引就是存储顺序)
A(index):index可以是任意的数组,index的元素必须是正整数,且不大于numel(A),返回的是一个尺寸与index一样的数组
下标和索引之间可以通过ind2sub和sub2ind函数相互转换,具体可以看帮助,很简单
[I,J] = ind2sub(siz,IND)
IND = sub2ind(siz,I,J)
还有使用A(:)就可以将数组A转换为列向量
A(8):表示引用A的第8个元素
B=A([1 10 5 2 2 1 3]):表示依次引用A的第1,10,5,2,2,1,3个元素,返回与index尺寸相同的数组,也就是说size(B)=size(index)
A([2 5 9;1 1 1;8 5 6]):返回的时侯是一个3*3的矩阵
>>A=magic(5)%括号中为索引值
A =
17 (1) 24 (6) 1 (11) 8 (16) 15 (21)
23 (2) 5 (7) 7 (12) 14 (17) 16 (22)
4 (3) 6 (8) 13 (13) 20 (18) 22 (23)
10 (4) 12 (9) 19 (14) 21 (19) 3 (24)
11 (5) 18 (10) 25 (15) 2 (20) 9 (25)
>>A(8)
ans =
6
>>A([1 10 5 2 2 1 3])
ans =
17 18 11 23 23 17 4
>>A([2 5 9;1 1 1;8 5 6])
ans =
23 11 12
17 17 17
6 11 24
3.布尔法引用
A(X):X是一个有0和1组成布尔型数据,且size(A)=size(X),对应位置为1则留下该数据,0则去掉,最后按A中的存储顺序,返回一个列向量
假如说A是3*3的数组
A(logical([1 0 0;0 1 0;0 0 1])):表示引用了数组A的对角线元素,注意必须使用logical将0/1数组转换为布尔型
>>A=magic(3)%生成一个3*3的数组
A=
8 1 6
3 5 7
4 9 2
>>x=logical([1 1 0;0 1 1;1 0 1])%将double转化为boolean型数据
x =
1 1 0
0 1 1
1 0 1
>>A(x)%引用对应位置为1的数据,返回列向量
ans =
8
4
1
5
7
2
>>x=A>5%是有了比较语句,返回布尔型数据,对应位置数据大于5的为1,否则为0
x =
1 0 1
0 0 1
0 1 0
>>A(x)%返回大于A中大于5的元素,其实该命令可以一次性执行A(A>5)或者find(A>5),前者返回具体元素,后者返回大于5的数据的索引值
ans =
8
9
6
7
>>A(A>5)%一次性执行上面的命令
ans =
8
9
6
7
>>indx=find(A>5)%查找A中对于5的元素,返回它们的索引(index)值,此时我们可以通过A(index)返回具体的元素
index =
1
6
7
8
更多相关内容 -
指针 二维数组元素引用
2020-12-30 16:30:24二维数组元素指针引用 指针与一维数组和二维数组 1.定义 2.关系 3.数组指针和指针数组的区别 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的...二维数组元素指针引用
1.定义
2.数组指针和指针数组的区别
1.二维数组可以理解为是一个一维数组,不过每个数组元素又是一个一维数组
int a[2][3]={{1,2,3},{4,5,6}};
可以理解为,二维数组只有两个元素,即a[0]和a[1],只不过元素类型为一维数组
指向二维数组的指针(行指针)
格式:类型 (*指针名) [N]
N为数组的第二维长度2.二维数组指针与指针型数组的区别
int a[][3] = { {1,2,3},{4,5,6} };
int *p0[3] = a; //错误,将一个二维数组赋给指针型数组
int(*p1)[3] = a; //正确
数组指针(也称行指针)
定义 int (*p)[n];
()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将**二维数组**赋给一指针,应这样赋值: int a[3][4]; int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0] p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][ ]
比如要表示数组中i行j列一个元素:
*(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j]
优先级:()>[]>*
出处:
https://www.cnblogs.com/hongcha717/archive/2010/10/24/1859780.html3.实现一个3*4阶矩阵转置 指针为形参
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<stdlib.h> //定义一个3行4列的二维数组arr。 //定义一个函数func()完成矩阵转置,以数组指针作为参数。 //在func()函数内部,使用for循环完成矩阵转置 void func(int(*pa)[4], int(*pb)[3], int x, int y) { int i, j; /*-------------------------begin------------------*/ for(i=0;i<x;i++) for(j=0;j<y;j++){ *(pb[j]+i)=*(pa[i]+j); // *(*(pb+j)+i)=*(*(pa+i)+j); // pb[j][i]=pa[i][j]; // (*(pb+j))[i]=(*(pa+i))[j]; } /*--------------------------end-------------------*/ printf("转置:\n"); for (i = 0; i < y; i++) { for (j = 0; j < x; j++) { printf("%d\t", pb[i][j]); } printf("\n"); } } int main() { int i, j; int arr[3][4], brr[4][3]; printf("输入二维数组的元素:\n"); for (i = 0; i < 3; i++) { for (j = 0; j < 4; j++) { scanf("%d", &arr[i][j]); } } func(arr,brr,3,4); return 0; }
另有: -
慕课编译原理(第十七章.数组元素引用的翻译)
2020-04-28 11:05:07数组元素引用的翻译0 目录17 语义分析和中间代码生成217.2 数组元素引用的翻译17.2.1 课堂重点17.2.2 测试与作业18 下一章 0 目录 17 语义分析和中间代码生成2 17.2 数组元素引用的翻译 17.2.1 课堂重点 ... -
Matlab中数组元素引用有三种方法
2018-07-07 10:07:38布尔法(Boolean)在使用这三种方法之前,大家头脑一定要清晰的记住,Matlab中数组元素是按列存储(与Fortran一样),比如说下面的二维数组A= 8 1 6 3 5 7 4 9 2Matlab的存储顺序是8,3,4,1,5,9,6,7,2,也就是说...1.下标法(subscripts)
2.索引法(index)
3.布尔法(Boolean)
在使用这三种方法之前,大家头脑一定要清晰的记住,Matlab中数组元素是 按列存储 (与Fortran一样),比如说下面的二维数组
A=
8 1 6
3 5 7
4 9 2
Matlab的存储顺序是8,3,4,1,5,9,6,7,2,也就是说 先行后列 ,对于3维数组呢,就是 先行后列再页
对应个元素的索引和下标分别为
Element Index Subscripts
8 1 (1,1)
3 2 (2,1)
4 3 (3,1)
1 4 (1,2)
5 5 (2,2)
9 6 (3,2)
6 7 (1,3)
7 8 (2,3)
2 9 (3,3)
从上面的例子中已经很清晰的说明了下标和索引的区别了,也就是说Matlab为没有个元素分配了一个唯一识别的ID(即index)
1.下标法引用
A(ii,jj):其中ii和jj可以是一维向量、标量、“:”号或者“end”
大家对下标估计比较熟悉,由于在C语言中接触过,但是我这里需要强调的是,Matlab的下标是可以多行多列同时引用的,而像C语言等一次只能引用一个,比如
A(2:3,3:-1:1)表示引用数组中的2~3行,3~1列对应的元素
A(:,end)表示引用最后一列元素 ,“:”表示所有列或行,“end”表示最后一列或列,“end-n”表示倒数第n行或列
A(1,end-1)表示引用第1行倒数第2个元素
A([2 1 3 3],[1 1 2 2 1])表示引用按两个向量引用指定的元素,即A中的第2,1,3,3行和第1,1,2,2,1列对应的元素
>>A=magic(3)
A =
8 1 6
3 5 7
4 9 2
>>A(2:3,3:-1:1)
ans =
7 5 3
2 9 4
>>A(:,end)
ans =
6
7
2
>>A(1,end-1)
ans =
1
>>A([2 1 3 3],[1 1 2 2 1])
ans =
3 3 5 5 3
8 8 1 1 8
4 4 9 9 4
4 4 9 9 4
2.索引法引用 (说白了索引就是存储顺序)
A(index):index可以是任意的数组,index的元素必须是正整数,且不大于numel(A), 返回的是一个尺寸与index一样的数组
下标和索引之间可以通过 ind2sub和sub2ind函数相互转换 ,具体可以看帮助,很简单
[I,J] = ind2sub(siz,IND)
IND = sub2ind(siz,I,J)
还有使用A(:)就可以将数组A转换为列向量
A(8):表示引用A的第8个元素
B=A([1 10 5 2 2 1 3]):表示依次引用A的第1,10,5,2,2,1,3个元素,返回与index尺寸相同的数组,也就是说size(B)=size(index)
A([2 5 9;1 1 1;8 5 6]):返回的时侯是一个3*3的矩阵
>>A=magic(5)% 括号中为索引值
A =
17 (1) 24 (6) 1 (11) 8 (16) 15 (21)
23 (2) 5 (7) 7 (12) 14 (17) 16 (22)
4 (3) 6 (8) 13 (13) 20 (18) 22 (23)
10 (4) 12 (9) 19 (14) 21 (19) 3 (24)
11 (5) 18 (10) 25 (15) 2 (20) 9 (25)
>>A(8)
ans =
6
>>A([1 10 5 2 2 1 3])
ans =
17 18 11 23 23 17 4
>>A([2 5 9;1 1 1;8 5 6])
ans =
23 11 12
17 17 17
6 11 24
3.布尔法引用
A(X):X是一个有0和1组成布尔型数据,且 size(A)=size(X), 对应位置为 1则留下该数据,0则去掉 ,最后按A中的存储顺序, 返回一个列向量
假如说A是3*3的数组
A(logical([1 0 0;0 1 0;0 0 1])):表示引用了数组A的对角线元素,注意必须使用logical将0/1数组转换为布尔型
>>A=magic(3)%生成一个3*3的数组
A=
8 1 6
3 5 7
4 9 2
>>x=logical([1 1 0;0 1 1;1 0 1])%将double转化为boolean型数据
x =
1 1 0
0 1 1
1 0 1
>>A(x)%引用对应位置为1的数据,返回列向量
ans =
8
4
1
5
7
2
>>x=A>5%是有了比较语句,返回布尔型数据,对应位置数据大于5的为1,否则为0
x =
1 0 1
0 0 1
0 1 0
>>A(x)%返回大于A中大于5的元素,其实该命令可以一次性执行A(A>5)或者find(A>5),前者返回具体元素,后者返回大于5的数据的索引值
ans =
8
9
6
7
>>A(A>5)%一次性执行上面的命令
ans =
8
9
6
7
>>indx=find(A>5)%查找A中对于5的元素,返回它们的索引(index)值,此时我们可以通过A(index)返回具体的元素
index =
1
6
7
8
-
C语言引用一个数组元素的三种方式
2022-03-03 20:11:44其中a是数组名,p是指向数组元素的指针变量,其初值为p = a。 代码实现: #include<stdio.h> #include<stdlib.h> int main(void){ int a[10], i; int *p; p = a; // 数组首地址赋值给p for(i = 0; ... -
MATLAB数组元素引用的三种方法
2018-10-15 13:23:03https://blog.csdn.net/sinat_27554409/article/details/72355422 -
引用数组元素
2019-04-24 17:15:47引用一个数组元素可以有以下两种方法: (1)指针法。有 *(a+i), *(p+i) 两种表现形式,都是用间接访问的方法来引用数组元素。 (2)下标法。有a[i] 和 p[i] 两种形式。在编译时这两种形式也要处理成 *(a+i) 或 *(p+... -
引用数组元素的四种方式
2020-02-29 23:10:58//注意a++是不可的,因为a本来就代表了数组的首地址,a是不可改变的。 { printf ( "%d\n" , * p ) ; } printf ( "-----------------\n" ) ; for ( p = a , i = 0 ; i < 5 ; i ++ ) ... -
C语言:二维数组元素的引用
2017-09-12 17:34:08任务代码: (1) #include int main() { int a[3][5],i,j; printf("输入3*5数组:\n"); //输入 for(i=0;i;i++) { for(j=0;j;j++) { scanf("%d",&a[i][j]); } -
C语言_数组_二维数组的定义和二维数组元素的引用
2020-09-14 18:02:54通过赋初值定义二维数组的大小 第一种: 例如:int a[][3] = {{1, 2, 3}, {4, 5}, {6}, {8}}; 注意: 对于二维数组,省略只能省略第一个方括号中的常量表达式 如上的初赋值语句等同于: int a[4][3] = {{1... -
C语言编程技术实践-2020版、C语言编程技术实践 一维数组、一维数组中元素的引用 一维数组元素的引用方法....
2020-10-14 20:34:32一维数组元素的引用方法主讲人李刚目录1一维数组元素引用实例演示2一维数组元素引用的格式3一维数组元素引用的举例1 一维数组元素引用实例演示1. 一维数组元素引用实例演示实例介绍影院座位连续人员调动内存空间连续... -
Matlab中数组元素引用
2015-08-10 10:26:40Matlab中数组元素引用有三种方法: 1.下标法(subscripts) 2.索引法(index) 3.布尔法(Boolean) 在使用这三种方法之前,大家头脑一定要清晰的记住,Matlab中数组元素是按列存储(与Fortran一样),比如说下面的... -
c语言二维数组元素引用和参数传递
2012-09-22 22:56:34在学习C语言中,多维数组元素应用有许多不同的方式。其中以二维数组最为常见。例如声明数组 int a[3][4]。这个二维数组,如果我想取第2行第3列数据, 可以直接是a[2][3]。除了这一种方式外,我还可以: *(*(a + 2) +... -
python数组
2021-02-09 20:18:37## Python数组注意:Python不具有对数组的内置支持,但是可以使用[Python列表](https://www.w3schools.com/python/python_lists.asp)代替。注意:此页面显示了如何将LISTS用作数组,但是,要在Python中使用数组,您... -
c语言——数组指针和通过指针引用数组元素的方法总结
2021-05-22 00:46:071.数组指针:即指向数组的指针那么, 如何...2.通过指针引用数组元素的基本方法(1)小标法:a[i]。(2)指针法:* (a+i) 或 * (p+i) 或 p[i]。其中,a是数组名,p=a,即p指向数组a首元素的地址。问:为什么* (a+i) 和* ... -
引用数组元素时,数组下标可以是( )
2021-03-16 13:35:47摘要:、引用元素顾公众它包者和竞争业内应商企业部因外部的供等因素和素括企客、引用元素,相互系环境活动内部各部关系作、之间门之间以及与竞争营销有协企业企业企业微观务等的关、服是指。下标叙述功方罗汉的练... -
C语言中调用数组元素的三种方法:下标法、数组名法、指针法
2021-03-14 10:53:07/*调用数组元素的三种... printf("用下标引用数组元素:\n"); for (i = 0; i < 5; i++) printf("%d\n", a[i]); printf("用数组名引用数组元素:\n"); for (i = 0; i < 5; i++) printf("%d\n", * (a+i)) -
Python列表中的数组如何引用
2020-12-03 17:20:01本文简介的是Python列表,在计算机语言中,...Python中没有数组的数据结构,但列表很像数组,如:a=[0,1,2]这时a[0]=0, a[1]=1, a[[2]=2,但引出一个问题,即如果数组a想定义为0到999怎么办,这时可能通过a = range... -
js代码-数组引用陷阱 reverse ...reverse() 方法将数组中元素的位置颠倒,并返回该数组的引用
2021-07-14 21:45:16js代码-数组引用陷阱 reverse reverse() 方法将数组中元素的位置颠倒,并返回该数组的引用 -
在c语言中引用数组元素时其数组下标的数据类型有哪些
2021-05-22 13:31:47在c语言中引用数组元素时其数组下标的数据类型有哪些发布时间:2021-01-22 13:37:26来源:亿速云阅读:99作者:小新这篇文章主要介绍了在c语言中引用数组元素时其数组下标的数据类型有哪些,具有一定借鉴价值,感... -
matlab中数组元素的引用
2015-03-15 20:36:19matlab中数组元素的引用 ...matlab数组元素引用的方法有三种。 1)下标法 A(i,j),其中i,j可以为一维向量、标量、:号或者end(end表示最后一行或最后一列)。i表示行的信息,j表示列的信息。 利用上面A的例子。 -
C语言中的数组
2021-05-21 06:37:49塔筒数组名标识,每个数组可以分成多个数组元素,这些元素可以是基本数据类型或是构造类型,每个数组元素可以通过数组名和元素的相对位置(即下标)来应用。一维数组定义一位数组的所有元素都不是数组。在C语言中使用... -
在c语言中引用数组元素时,其数组下标的数据类型允许是什么
2021-08-08 00:10:20在c语言中引用数组元素时,其数组下标的数据类型允许是:整型常量或整型表达式。C语言规定只能逐个引用数组元素而不能一次引用整个数组,数据元素的表示形式为“数组名[下标]”,下标可以是整型常量... -
1. 若有定义:int a[2][3];,以下选项中对a数组元素正确引用的是
2021-05-22 13:20:05该楼层疑似违规已被系统折叠隐藏此楼查看此楼西工大机考《C语言程序设计》网考寻求答案(非免费)找我Q...,以下选项中对a数组元素正确引用的是( )。A.a[2][!1]B.a[2][3]C.a[0][3]D.a[1>2][!1]2. 以下描述错误的是...