用MATLAB实现多矢量化?

用MATLAB实现多矢量化?,matlab,vectorization,Matlab,Vectorization,我不确定我是否正确命名了此问题: 我所拥有的: X = [0 1 2 3 4 5 6 7 8 9; 6 2 5 5 4 5 6 3 7 6]; Z = [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 0 1; 0 0 0 0 0 0 0 0 1 0]; 现在我的问题是: 我们将矩阵X的第二整行与矩阵Z进行比较(两者的coulmn数相同,但行数可能不同) 我希望得到的结果如下: ans = [5 5 6 7] 因为: X(2

我不确定我是否正确命名了此问题:

我所拥有的:

X = [0 1 2 3 4 5 6 7 8 9; 6 2 5 5 4 5 6 3 7 6];
Z = [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 0 1; 0 0 0 0 0 0 0 0 1 0];
现在我的问题是:

我们将矩阵X的第二整行与矩阵Z进行比较(两者的coulmn数相同,但行数可能不同) 我希望得到的结果如下:

ans = [5 5 6 7]
因为:

X(2,Z(1,:)) = 5
X(2,Z(2,:)) = 5
X(2,Z(3,:)) = 6
X(2,Z(4,:)) = 7
所以我的问题是,我想做它没有任何循环,细胞或annonymous函数。通过矢量化一切来缩短代码。我能一行完成吗

如果我执行以下操作,则上述操作不起作用:

X(2,Z(:,:))

它实际上非常简单-您可以在
X
的第二行和
Z
的转置之间使用矩阵乘法:

> X(2,:)*Z'
ans =

   5   5   6   7

> 

@Paul R的解决方案非常好,下面是两行中的另一种方法:

[myRow, myCol] = find(Z');
X(2,myRow)

. 谢谢。有了八度音阶,我可以用
5 5 7 6
-它在MATLAB中工作吗?@PaulR没有注意到顺序的变化,现在应该可以了。是的,现在似乎可以用了-不管怎样,它现在可以用八度音阶给我
5 5 6 7