Numpy массив вопросов о .shape - PullRequest
2 голосов
/ 11 апреля 2019

Я новичок в numpy, и у меня есть некоторые проблемы с формами массива.

Я хочу работать с массивом как с матрицей в matlab.Однако меня смущают следующие вещи:

>>> b = np.array([[1,2],[3,4]])
array([[1, 2],
       [3, 4]])

>>> c = b[:,1] # I want c is a column vector
>>> c.shape
(2,)

>>> d = b[1,:] # I want d is a row vector
>>> d.shape
>>> (2,)

Я хочу трактовать c и d как вектор столбца и вектор строки соответственно.

Я не понимаюпочему c и d имеют одинаковую форму (2,).

Так что меня беспокоит дальнейшие вычисления.

Может кто-нибудь помочь мне разобраться с этой проблемой.Большое спасибо!

Ответы [ 3 ]

0 голосов
/ 11 апреля 2019

Вы можете использовать

c = b[:,[1]]
d = b[[1],:]

чтобы получить вектор как явный вектор строки / столбца:

c.shape # (1, 2)
d.shape # (2, 1)
0 голосов
/ 11 апреля 2019

Использование простого целого числа в качестве индекса возвращает этот столбец / строку как истинный вектор.Это похоже на индексирование списка - вы получаете элемент только с этим индексом.Содержащий размер удаляется:

>>> my_list = ['a', 'b', 'c', 'd']
>>> my_list[2]
'c'

Вместо этого вы хотите срез.Срез списка - это (под) список, а срез матрицы - это матрица.С помощью numpy вы можете указать это либо как нотацию среза, используя :, либо как последовательность индексов:

>>> c = b[:,:1]  # slice notation
>>> c.shape
(2, 1)
>>> d = b[[1],:] # sequence of indices
>>> d.shape
(1, 2)

Нотация среза предназначена для последовательных диапазонов индексов.Например, :1 означает «все от начала до 1».Обозначение последовательности предназначено для непоследовательных наборов индексов.Например, [0, 2] пропускает индекс 1. Если вам нужен только один индекс, последовательность обозначений будет проще, если вы не имеете дело с границами (первая / последняя строка / столбец).

0 голосов
/ 11 апреля 2019

Как правило, если вы хотите, чтобы ваш массив c был вектором столбца формы (2,1), вы можете изменить его следующим образом:

c = c.reshape(-1,1) # c.shape --> (2, 1)

Аналогично, если вы хотите, чтобы ваш массив d был вектором строки формы (1,2), вы можете изменить его следующим образом:

d = d.reshape(1,-1) # d.shape --> (1, 2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...