Ответ 1
Массив формы (442, 1)
является двумерным. Он имеет 442 строки и 1 столбец.
Массив формы (442, )
является одномерным и состоит из 442 элементов.
Обратите внимание, что их представления должны выглядеть иначе. Существует разница в количестве и размещении скобок:
In [7]: np.array([1,2,3]).shape
Out[7]: (3,)
In [8]: np.array([[1],[2],[3]]).shape
Out[8]: (3, 1)
Обратите внимание, что вы можете использовать np.squeeze
для удаления осей длиной 1:
In [13]: np.squeeze(np.array([[1],[2],[3]])).shape
Out[13]: (3,)
Правила вещания NumPy позволяют автоматически добавлять новые оси слева, когда это необходимо. Поэтому (442,)
может транслироваться до (1, 442)
. И оси длины 1 могут транслироваться на любую длину. Так
когда вы проверяете равенство между массивом формы (442, 1)
и массивом формы (442, )
, второй массив получает форму (1, 442)
, а затем два массива расширяют свои оси длиной 1, так что они оба становятся широковещательными массивами формы (442, 442)
. Вот почему, когда вы проверяли на равенство, результатом был логический массив формы (442, 442)
.
In [15]: np.array([1,2,3]) == np.array([[1],[2],[3]])
Out[15]:
array([[ True, False, False],
[False, True, False],
[False, False, True]], dtype=bool)
In [16]: np.array([1,2,3]) == np.squeeze(np.array([[1],[2],[3]]))
Out[16]: array([ True, True, True], dtype=bool)