【发布时间】:2015-05-05 12:00:37
【问题描述】:
短版
有没有比~isempty(x)“布尔化”非标量x 更简单的方法(在其他语言中很常见)?
tl;dr 版本
在许多语言(例如 Python)中,当变量/符号在布尔上下文中求值时,它们会自动转换为布尔标量。特别是,在这种情况下,类似列表的数据结构x 如果为空,则自动转换为 false,否则为 true。
这意味着可以使用列表作为操作数编写任意布尔表达式。例如:
>>> 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
对于“布尔化”a,有没有比 ~isempty(...) 更简洁的表示法?
MATLAB 数组?
【问题讨论】:
-
我不完全明白你的问题。你有多个数组,你想比较它们是否都是非空的?
-
能够对不同长度的列表进行布尔运算是否重要,或者问题更多的是关于运算符本身的干净符号?
-
@xenoclast:两者都很重要。基本上,我正在寻找与 Python 中可以做的最接近的符号,如我的问题的 tl;dr 版本所示。
-
好吧,我的回答无效,我删除了它并对@thewaywewalk 的回答发表了评论。
-
完全同意其他答案:
isempty绝对没有问题。您所说的布尔化更广为人知的是 Truth Value Testing。在 Python 中,空列表在布尔条件下隐式计算为False,我同意你的观点,它不那么麻烦,但另一方面,当事情不工作时,了解真正发生的事情就不那么直接了。
标签: matlab syntax casting shortcut notation