【问题标题】:Matlab : replace each element with true/false value (logical array)Matlab:用真/假值替换每个元素(逻辑数组)
【发布时间】:2015-03-31 02:39:09
【问题描述】:

我一直想遍历一个数组/矩阵(而不是为了练习/学习而使用关系运算符),如果满足一个简单的条件,将每个元素替换为 true 或false 值,并以逻辑类的结果数组结束。

vec = [5 9 3 4 6 11];

[r,c] = size(vec); 

vecempty = zeros(r,c);

for i = 1:r;
    for j = 1:c
        if vec(i,j) > 5;
            vecempty(i,j) = true;
        else
            vecempty(i,j) = false;
        end
    end
end

fprintf('Your truth matrix: \n\n\n') 

disp(vecempty) 

total = 0;

for i = 1:r;
    for j = 1:c;
        total = total + vecempty(i,j);
    end
end

fprintf('Total number of truth elements: %d \n\n\n', total) 

对于我的“vec(i,j)”条件,我最初将它们设置为“= 1”或“= 0”,但我猜这只是提供数字本身,而不是真假。因此,我选择了“=true”或“=false”,但我想知道,为什么我返回的数组(vecempty)没有显示为逻辑类?

遵循相同的价值观:

Vectruth = vec > 5

结果“Vectruth”作为逻辑类返回。我很困惑如果我在循环中返回“true”或“false”,为什么我的结果向量不会显示为逻辑类,当“vec > 5”时,它显示为逻辑类?谢谢。

【问题讨论】:

    标签: matlab for-loop conditional-statements


    【解决方案1】:

    你可以通过调用来初始化一个逻辑数组

    vecempty = false(r,c);
    

    而不是

    vecempty = zeros(r,c);
    

    当然,false 可以替换为 true,如果合适的话。

    【讨论】:

    • 谢谢,这确实导致我的“vecempty”成为一个逻辑类。然而,在我上面所做的事情中,为什么我的“vecempty”不会被识别为逻辑类有什么原因吗?
    • 当您的数组已被初始化为数值并且您尝试为其元素之一分配一个逻辑值时,Matlab 将其转换为 0 或 1,使数组保留为数值。如果您因为某种原因在开始时不知道您确实需要一个逻辑数组,您可以稍后通过logical(vecempty) 对其进行转换。但现在我不知道什么时候会出现这种情况。也许你可以澄清一下?
    • 概括 FliegenderZirkus 所说的,当您将带括号的赋值索引到初始化值时,MATLAB 将赋值右侧的值强制转换为左侧值的类。所以 true 和 false 被强制加倍,​​即 vecempty 被初始化为的类型。
    猜你喜欢
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多