Signature: all(iterable, /)
Docstring:
Return True if bool(x) is True for all values x in the iterable.
Для массива 1d:
In [200]: x=np.ones(3)
In [201]: x
Out[201]: array([1., 1., 1.])
In [202]: y = x==x
In [203]: y # 1d array of booleans
Out[203]: array([ True, True, True])
In [204]: bool(y[0])
Out[204]: True
In [205]: all(y)
Out[205]: True
Для массива 2d:
In [206]: x=np.ones((2,3))
In [207]: x
Out[207]:
array([[1., 1., 1.],
[1., 1., 1.]])
In [208]: y = x==x
In [209]: y
Out[209]:
array([[ True, True, True],
[ True, True, True]])
In [210]: y[0]
Out[210]: array([ True, True, True])
In [211]: bool(y[0])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-211-d0ce0868392c> in <module>
----> 1 bool(y[0])
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Но для другого массива 2d:
In [212]: x=np.ones((3,1))
In [213]: y = x==x
In [214]: y
Out[214]:
array([[ True],
[ True],
[ True]])
In [215]: y[0]
Out[215]: array([ True])
In [216]: bool(y[0])
Out[216]: True
In [217]: all(y)
Out[217]: True
Итерация на массиве NumPy происходит по первому измерению.[i for i in x]
Эта неоднозначность ValueError возникает каждый раз, когда многозначный логический массив используется в контексте, который ожидает скалярное логическое значение.Выражения if
и or/and
являются общими.
In [223]: x=np.ones((2,3))
In [224]: y = x==x
In [225]: np.all(y)
Out[225]: True
np.all
отличается от Python all
тем, что он «знает» о размерах.В этом случае ravel
обрабатывает массив как 1d:
По умолчанию (axis
= None
) выполняется логическое И для всех измерений входного массива.,