короткой версияЕсть ли что-то более простое, чем `~ isempty (x)`, чтобы отличить нескалярный `x` в булевском скаляре?
Есть ли менее громоздкий способ (как это имеет место обычно в других языках) к «booleanize» не-скалярной x
чем ~isempty(x)
?
ТЛ; др версия
Во многих языках, таких как 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
Есть менее громоздкими, чем обозначение ~isempty(...)
для «booleanizing» в MATLAB массив?
Я не понимаю ваш вопрос полностью. У вас несколько массивов, и вы хотите сравнить, если все не пустое? – thewaywewalk
Важно ли, чтобы вы могли выполнять логические операции в списках разной длины или это вопрос о чистой нотации для самих операторов? – xenoclast
@xenoclast: оба важны. В основном, я ищу ближайшую нотацию, эквивалентную тому, что можно сделать в Python, как показано в версии tl; dr моего вопроса. – kjo