0
        for s=1:length(C_tem)
        for w=1:length(C_tem{s})
            if (abs(C_tem{s}{w}) >= 0)
               C_tem{s}{w} = 1;
            else
               C_tem{s}{w} = 0;
            end
          end
        end

我试图将大于 0 的值设置为 1,如果小于或等于 0,但由于某种原因这不起作用。我是 matlab 新手,如果可能的话,我真的需要帮助。先感谢您..

4

2 回答 2

3

我没有在matlab上工作太多,但是这部分代码感觉很可疑-

if (abs(C_tem{s}{w}) >= 0)
               C_tem{s}{w} = 1;
            else
               C_tem{s}{w} = 0;
            end

你为什么在这里做腹肌?我认为它会从号码中删除符号。代码应该是这样的 -

if (C_tem{s}{w} > 0) //I have removed abs and >= is replaced with >
               C_tem{s}{w} = 1;
            else
               C_tem{s}{w} = 0;
            end
于 2012-05-21T04:38:05.643 回答
0

abs(x)>=0对于 x 的所有值都为真。简单的答案是去除腹肌。更完整的答案跟进丹的评论。单元阵列在内部级别是不必要的。如果您有一个常规数组的元胞数组,那么您可以对整个代码块执行此操作。

for s=1:length(C_tem)
    C_tem{s} = (C_tem{s} >= 0);
end

有两点需要注意:比较运算符是矢量化的,这意味着它们返回一个与输入大小相同的矩阵,从而一次比较所有值。并且,运算符的输出是 1 表示真,0 表示假。

还要查看内置函数sign,看看它是否更接近你想要做的。

于 2012-05-21T13:37:24.993 回答