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 进行比较(两者的列数相同,但行数可能有所不同)我想要得到以下结果:

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

所以我的问题是我想在没有任何循环、单元格或匿名函数的情况下执行此操作。只需通过矢量化所有内容来缩短代码。我可以在一行中完成吗??

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

X(2,Z(:,:))
4

2 回答 2

6

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

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

   5   5   6   7

> 
于 2013-08-23T09:40:04.017 回答
2

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

[myRow, myCol] = find(Z');
X(2,myRow)
于 2013-08-23T09:58:01.740 回答