в чем разница между этими двумя фигурами? - PullRequest
0 голосов
/ 24 марта 2019
In [136]: s = np.array([[1,0,1],[0,1,1],[0,0,1],[1,1,1]])                                                          

In [137]: s                                                                                                        
Out[137]: 
array([[1, 0, 1],
       [0, 1, 1],
       [0, 0, 1],
       [1, 1, 1]])

In [138]: x = s[0:1]                                                                                               

In [139]: x.shape                                                                                                  
Out[139]: (1, 3)

In [140]: y = s[0]                                                                                                 

In [141]: y.shape                                                                                                  
Out[141]: (3,)

In [142]: x                                                                                                        
Out[142]: array([[1, 0, 1]])

In [143]: y                                                                                                        
Out[143]: array([1, 0, 1])

В приведенном выше коде форма х (1,3) и форма у (3,).

(1,3): 1 row and 3 columns
(3,): How many rows and columns in this case?

Представляет ли (3,) одномерный массив?

На практике, если я хочу перебирать матрицу строка за строкой, в какую сторону мне идти?

for i in range(len(x)):
    row = x[i]
    # OR
    row = x[i:i+1]

1 Ответ

1 голос
/ 24 марта 2019

Сначала вы можете получить количество измерений массива numpy от array до len(array.shape).

Массив с некоторыми размерами длины 1 не равен массиву с удаленными этими измерениямиНапример:

>>> a = np.array([[1], [2], [3]])
>>> b = np.array([1, 2, 3])
>>> a
array([[1],
       [2],
       [3]])
>>> b
array([1, 2, 3])
>>> a.shape
(3, 1)
>>> b.shape
(3,)
>>> a + a
array([[2],
       [4],
       [6]])
>>> a + b
array([[2, 3, 4],
       [3, 4, 5],
       [4, 5, 6]])

Концептуально разница между массивом формы (3, 1) и массивом формы (3,) подобна разнице между длиной [100] и 100.

[100] - это list, который имеет один элемент.У него может быть больше, но сейчас у него есть минимально возможное количество элементов .

С другой стороны, даже не имеет смысла говорить о длине 100потому что у него нет единицы.

Аналогично, массив формы (3, 1) имеет 3 строки и 1 столбец, а массив формы (3,) не имеет столбцов вообще ,У него даже нет рядов, в некотором смысле; - это строка, точно так же, как 100 не имеет элементов, потому что является элементом.

Для получения дополнительной информации о поведении массивов различной формы при взаимодействии сВ других массивах вы можете видеть правила вещания .

Наконец, для полноты, чтобы перебрать строки массива numpy, вы можете просто сделать for row in array.Если вы хотите выполнить итерацию по задним осям, вы можете использовать np.moveaxis, например:

>>> array = np.array([[1, 2], [3, 4], [5, 6]])
>>> for row in array:
...     print(row)
...
[1 2]
[3 4]
[5 6]
>>> for col in np.moveaxis(array, [0, 1], [1, 0]):
...     print(col)
...
[1 3 5]
[2 4 6]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...