matlab相关问题解决
matlb中多个二维数组转化成三维数组
% 申请三维变量空间,然后赋值:比如你的两个二维数组是
a1=[1,2,3;3,4,5;5,6,7];
a2=[4,3,2;2,1,0;6,7,8];
% 先申请变量空间;
a=zeros(3,3,2)
% 赋值
a(:,:,1)=a1;
a(:,:,2)=a2;
这时a就是你想要的3维矩阵。
matlb中无法显示具有 524288 个以上元素的变量
matlab中要查看3维以上的数据,很多时候显示无法查看,可以使用以下代码在命令行中查看到具体数据:
数据变量名(:,:,:,:)
括号里的第1个逗号前面为第几行(冒号代表所有行),括号里的第2个逗号前面为第几列(冒号代表所有列),后面几维数据看你的数据格式分别代替什么了。 其中“:”表示所有行或者所有列,全部冒号就是查看所有数据。
查看矩阵大小(size函数)
size(X,1),返回矩阵X的行数;
size(X,2),返回矩阵X的列数;如:N=size(X,2),就是把矩阵X的列数赋值给N
1、s=size(A), 当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时矩阵的行数,第二个元素是矩阵的列数.
2、[r,c]=size(A), 当有两个输出参数时,size函数将矩阵的行数返回到第一个输出变量r, 将矩阵的列数返回到第二个输出变量c.
3、size(A,n),如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则size将返回矩阵的行数或列数.其中r=size(A,1)该语句返回的时矩阵A的行数,c=size(A,2)该语句返回的时矩阵A的列数.
4、size():获取矩阵的行数和列数
生成二维/三维/四维等多维数组(cat函数)
cat:用来联结数组
用法:C = cat(dim, A, B) 按dim来联结A和B两个数组。
C = cat(dim, A1, A2, A3, ...) 按dim联结所有输入的数组。
e.g.
a=cat(3,A,B) 左括号后的3表示构造出的矩阵维数;在新的矩阵中第1、2维就是A和B这两个矩阵的行数和列数,第3维是A和B这两个矩阵的矩阵个数,即为2
cat(2, A, B)相当于[A, B];
cat(1, A, B)相当于[A; B].
使用“,”分割列表的语法,cat(dim, C{:})或cat(dim, C.field),这是将包含数据矩阵的cell或结构数组联合为一个数组的方便方式。
例如:
A = [1 2; 3 4];
B = [5 6; 7 8];
A
B
A = 1 2
3 4
B = 5 6
7 8
cat(1, A, B) %按列连接(列数相同)
ans =
1 2
3 4
5 6
7 8
cat(2, A, B) %按行连接(行数相同)
ans =
1 2 5 6
3 4 7 8
cat(3, A, B) %合成效果如下图
ans(:,:,1) =
1 2
3 4
ans(:,:,2) =
5 6
7 8
a = magic(3)
b = pascal(3)
k=1,合并后形如 [a;b],行添加矩阵(要求a,b的列数相等才能合并);
c = cat(1,a,b)
c =
8 1 6
3 5 7
4 9 2
1 1 1
1 2 3
1 3 6
k=2,合并后形如[a,b],列添加矩阵(要求a,b的行数相等才能合并)c = cat(2,a,b)
c =
8 1 6 1 1 1
3 5 7 1 2 3
4 9 2 1 3 6c = cat(3,a,b)
c(:,:,1) =
8 1 6
3 5 7
4 9 2
c(:,:,2) =
1 1 1
1 2 3
1 3 6
n维的矩阵合并,要求n-1维维数相等才可以.c = cat(4,a,b)
c(:,:,1,1) =
8 1 6
3 5 7
4 9 2
c(:,:,1,2) =
1 1 1
1 2 3
1 3 6
对N维数组重新排列其维数(permute函数)
permute函数用法:对N维数组重新排列其维数
使用方法:B = permute(A,order)
对N维数组A按照指定的向量order顺序来重新排列其维数,B和A有相同的值但是任何需要访问的特定元素其下标的顺序是被指定的向量order顺序来重新排列的,向量order中的元素必须是唯一的。
应用举例:下面的代码排列三维数组:随机生成一个三维数组X,各维的长度分别为:12,13,14。对X的维数进行重组,第一维作为第三维,第二维作为第一维,第三维作为第二维,最终的结果得到Y的大小是13 ✖ 14 ✖ 12。
X = rand(12,13,14);
Y = permute(X,[2 3 1]);
size(Y)
ans =
13 14 12
复制和平铺矩阵(repmat函数)
B = repmat(A, m, n) %将矩阵A复制m×n块,即B由m×n块A平铺而成
B = repmat(A, [m n])%与上面一致
B = repmat(A, [m n p…]) %B由m×n×p×…个A块平铺而成
repmat(A, m, n) %当A是一个数a时,该命令产生一个全由a组成的m*n矩阵