短版是否有比`〜isempty(x)`更简单的方式将非标量`x`转换为布尔标量?
有一个不太麻烦的方式(如在其他语言中常见的),以“booleanize”非标x
比~isempty(x)
?
TL;博士版本
在许多语言中,例如Python,当变量/符号在布尔上下文进行评估它们被自动转换为一个布尔标量。具体来说,在这种情况下,如果列表类数据结构x
被自动转换为假,否则为空。
这意味着可以使用列表作为操作数来编写任意布尔表达式。例如:
>>> list1 = [1, 1]
>>> list2 = [2, 2, 2]
>>> list3 = [3, 3, 3, 3]
>>> yesno = list1 and list2 and list3
>>> if yesno:
... print True
... else:
... print False
...
True
在MATLAB中,这不起作用。例如
>> list1 = [1 1];
>> list2 = [2 2 2];
>> list3 = [3 3 3 3];
>> yesno = list1 && list2 && list3;
Operands to the || and && operators must be convertible to logical scalar values.
>> yesno = list1 & list2 & list3;
Error using &
Matrix dimensions must agree.
我能想出的最好的是这样的:
>> yesno = ~isempty(list1) && ~isempty(list2) && ~isempty(list3);
>> if yesno
true
else
false
end
ans =
1
是否有一个不太繁琐的符号比~isempty(...)
为“booleanizing”一 MATLAB阵列?
缩短小幅我不明白你的问题完全。你有多个数组,你想比较是否所有非空? – thewaywewalk
重要的是你能够在不同长度的列表上进行布尔运算,或者更多的是关于操作符本身的简洁表示法的问题? – xenoclast
@xenoclast:两者都很重要。基本上,我正在寻找与Python能做什么相当的最接近的符号,如我的问题的tl; dr版本所示。 – kjo