我想使用a(~idx)
来更改indcies未返回的元素的值,如本例所示,但它不起作用。如何更改idx
未返回的所有元素的值?
a=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16] %4x4 matrix
idx = sub2ind(size(a), [2 3 4], [1 2 4]) %select indcies
a(idx)=10 %Change values for selected indcies
a(~idx)=0 %Change values for not selected indcies
这是输出,与a(idx)=10
的预期一样,但与a(~idx)=0
的预期不同
a =
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
idx =
2 7 16
a =
1 2 3 4
100 6 7 8
9 100 11 12
13 14 15 100
a =
1 2 3 4
100 6 7 8
9 100 11 12
13 14 15 100
a(~idx)
语法仅在idx
是逻辑数组时有效。
通过先将所有值设置为0,然后将所选值设置为10:,可以更容易地解决您的特定情况
a(:) = 0;
a(idx) = 10;
对于想要在idx
中保留原始值的情况,如下面注释中所建议的,请首先创建一个临时数组:
b = zeros(size(a));
b(idx) = a(idx);
a = b;