2014-12-19 2 views
16

В чем разница между 2 массивов, чьи формы являются-Разница между этими формами массива в Numpy

(442,1) и (442)?

Печать обе эти системы производит идентичный выход, но когда я проверить равенство ==, я получаю 2D вектор, как this-

array([[ True, False, False, ..., False, False, False], 
     [False, True, False, ..., False, False, False], 
     [False, False, True, ..., False, False, False], 
     ..., 
     [False, False, False, ..., True, False, False], 
     [False, False, False, ..., False, True, False], 
     [False, False, False, ..., False, False, True]], dtype=bool) 

Может кто-то объяснить разницу?

ответ

28

Массив формы (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 broadcasting rules позволяют новые оси на автоматически добавляется слева при необходимости. Таким образом, (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) 
+0

Спасибо. Я новичок в интеллектуальном анализе данных и не могу понять синтаксис ([value],), а не обычный ([value]) синтаксис для форм массива. Эта дополнительная запятая делала вещи свернутыми. – goelakash

+10

Запятая в '(422,)' указывает, что выражение является кортежем. Это кортеж с одним элементом внутри. Без запятой '(422)' оценивается как целое число «422». Форма массива всегда является кортежем. – unutbu

+2

Существуют ли массивы размера (1,442) и (442,) то же самое? – bikashg

Смежные вопросы