如何在MATLAB中设置矩阵中的所有非零值为1



我有一个matrix A,它的大小是40*20*20 doublematrix A的最小值为0。"matrix A"最大值为"126"。我想将matrix A中的所有非零值设置为"1" .我使用以下命令,但它不起作用。

find(A(:,:,:)~= 0) = 1; 

谁能告诉我为什么?

使用logical索引。不要使用find:

A(A ~= 0) = 1;

但是,如果您希望将矩阵中的所有值替换为0或1,其中1是任何非零的值,您可以简单地创建一个logical矩阵,如下所示:

A = A ~= 0;

如果你想让它也是一个double矩阵,你可以很容易地通过uplus(一元加号)运算符来实现,或者转换为double 1:

A = +(A ~= 0);
%// or
%A = double(A);

<一口> 1。这要归功于拉斐尔·蒙泰罗最初提出的选角想法。请看他的回答:https://stackoverflow.com/a/32803092/3250829。我还决定使用uplus操作符来不同。

如果0仍然是0,其他所有东西都变为1,则存在不需要索引也不需要查找。你可以这样做:

A = A ~= 0;

但是,它将创建一个逻辑矩阵。如果为双精度,只需将其强制转换为双精度,如下所示:

A = double(A ~= 0);

如文档所述(http://de.mathworks.com/help/matlab/ref/find.html), find函数只返回满足您作为find()函数参数提供的条件的元素的索引。因此,您尝试将1赋值给find()的返回参数是不能工作的。

我建议您不要使用find函数,而是循环遍历数组内容并逐个检查每个元素。结合size函数(http://de.mathworks.com/help/matlab/ref/size.html),您可以创建一个大小无关的函数来更改数组。只需存储size()的返回值并将其用作循环索引。

find返回索引,因此如果您想访问这些值,则必须执行A(find(A)) = 1;。注意,默认情况下,find查找非零值的索引:http://ch.mathworks.com/help/matlab/ref/find.html

最新更新