我正在尝试在MATLAB中实现以下Octave命令:
M = eye(x)(y,:);
x
只是一个数字(在我的示例中为10
),而y
是一个向量(此处为8x1):
y = [1 3 4 5 7 10 9 10];
Octave命令将生成:
M =
1 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 1
那些非常靠近对角线。
我最接近MATLAB的是以下命令:
n = size(y,1);
Y = eye(n, x);
但它会产生一些不同的东西。如果行和列之间的差异变大,那将会非常不同。
M =
1 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1 0 0
我怎么能用MATLAB得到第一个矩阵?
答案 0 :(得分:0)
首先你应该找到这个表达式eye(x)(y,:)
的含义。首先使用x
创建大小为x
的标识矩阵,然后选择索引位于y
的行。因此,等效语法为:
E = eye(x);
M = E(y,:);