给定索引矩阵选择矩阵的一些条目?

时间:2016-08-17 21:38:10

标签: matlab matrix indexing

我有两个矩阵,让我们说A和我的索引矩阵I,其值为1,我想取矩阵的值{{1}在相同位置,并且其值为0的情况下,我想在矩阵A的位置放置一个0。

例如:

A

所以我想要的输出是:

A=

1 2 3

4 5 6

7 8 9

I=

0 1 0

0 0 1

1 1 0

我知道我可以使用两个0 2 0 0 0 6 7 8 0 循环来完成它,但它效率不高。有没有更好的办法?任何建议将不胜感激。

4 个答案:

答案 0 :(得分:2)

如果I仅为10,请写下A.*I

ans =
     0     2     0
     0     0     6
     7     8     0

如果I有其他一些数字,那么只保留A Ik位于A = magic(3) I = [1 2 3 3 2 1 2 1 3] k = 1; A.*(I==k) 中相同位置的元素的一般情况是:

A =
     8     1     6
     3     5     7
     4     9     2
I =
     1     2     3
     3     2     1
     2     1     3
ans =
     8     0     0
     0     0     7
     0     9     0

输出:

I>k

当然,这可以改为I<=(k+5)(I==k)或您希望的任何其他逻辑陈述。
这里的关键是ans = 1 0 0 0 0 1 0 1 0 产生逻辑输出:

custom-typings/my-awesome-module.d.ts

让我们回到第一个案例。

答案 1 :(得分:1)

您可以反转索引矩阵(如果它还不是二进制的,它将隐式转换为二进制),并将这些索引处的值设置为零。

 A(~I) = 0

优点是您不需要定义新的或额外的矩阵,如果您的矩阵很大,这是很昂贵的。

答案 2 :(得分:0)

正如所指出的,在您的情况下,最好的方法是简单的术语乘法。在更复杂的情况下,您必须根据依赖于索引矩阵的规则更改条目,您可以访问索引矩阵指向的条目。

例如,如果要将单索引条目加倍并将零索引条目设置为-1,则应执行以下操作:

A(I==1)=2*A(I==1);
A(I==0)=-1;

答案 3 :(得分:0)

我非常喜欢@ EBH的答案,但这是另一种使用logical的方法:

B = zeros(size(A));
log_I = logical(I);
B(log_I) = A(log_I);
B

B =

     0     2     0
     0     0     6
     7     8     0