我还没有在MATLAB中看到这个。假设我有
V1 = [1 0], V2 = [0 1]
我想创建一个矩阵,使得矩阵必须是
[[1 0] [0 1]
[0 1] [0 2]]
即第一行和第一列为[V1 V2]
,矩阵的元素(2,2)
为[0 1]+[0 1]=[0 2]
因此,矩阵的索引(1,1)
应该是[1 0]
,矩阵的索引(1,2)
应该是[0 1]
。
有什么方法可以在MATLAB中实现吗?
答案 0 :(得分:3)
一个矩阵每个元素只能包含一个值。以下是您如何接近所描述内容的3种选择:
您可以像这样创建4 * 4矩阵:
V1 = [1 0]; V2 = [0 1];
M = [V1, V2; V2, 2*V2];
然后创建一个简写函数以2的块为索引
Mb = @(r,c) M( r, 2*c-1+[0,1] );
Mb(1,1); % = [1 0]
Mb(1,2); % = [0 1]
Mb(2,2); % = [0 2]
请注意,此操作不适用于以2块为单位分配回M
的情况,仅用于读取值。
或者,您可以使用单元格数组
C = {V1, V2; V2, 2*V2};
现在您可以根据需要对其进行索引,但是它不能像单个矩阵一样工作,也不能对整个单元格数组进行数值运算
C{2,2}; % = [2, 2], note the curly brace indexing
第三个选择是将矩阵设为3D
V1 = reshape( V1, 1, 1, [] );
V2 = reshape( V2, 1, 1, [] );
M3D = [V1, V2; V2, 2*V2];
现在您可以在第三维中索引
M3D(2,2,:); % = [0 2], but size [1,1,2]. Could reshape(M3D(2,2,:),1,[]) to get a row.