numpy: хотите извлечь столбец, дает строку

Я пришел от MATLAB к Python, и у меня возникли проблемы с матрицами.

Итак, у меня есть матрица (реализована как np.array), и я хочу манипулировать столбцами этой матрицы.

Итак, я начинаю с инициализации:

x = np.nan * np.ndarray((2,8)) y = np.nan * np.ndarray((2,8)) 

которые дают два

 array([[ nan, nan, nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan, nan, nan]]) 

Теперь я хочу поместить вектор вектора v внутри y чтобы вычислить что-то внутри x позже

 v = np.array([[v1, v2]]) # if v = np.array([[v1], [v2]], doesn't compute on next line y[:,0] = np.copy(v) x[:,0] = y[:,0] + someRandomVector 

Он возвращает мне ошибку:

 ValueError: could not broadcast input array from shape (2,2) into shape (2) 

Я думаю, проблема связана с тем, что x[:,0] не дает вектор-столбец, как я ожидал, а скорее

 >>> x[:,0] array([ nan, nan]) 

Любая идея или советы, которые могут помочь?

 >>>x[:,0:1] print x.[:,0:1].shape (2,1) 

В этой статье объясняется мотивация и управление массивом в numpy.

Это означает, что когда вы пишете X [,, 4], у вас есть одна нотация фрагмента и одна стандартная нотация индекса. Обозначение среза представляет все индексы вдоль первого измерения (только 0 и 1, так как массив имеет две строки), а 4 представляет пятый элемент вдоль второго измерения. Каждый экземпляр регулярного индекса в основном уменьшает размерность возвращаемого объекта на единицу, так как X является двумерным массивом, и есть один регулярный индекс, вы получаете 1D результат. Numpy просто отображает 1D массивы в виде векторов строк. Трюк, если вы хотите получить что-то из того же самого размера, с которого вы начали, заключается в том, чтобы использовать все индексы среза, как я сделал в примере в верхней части этого сообщения.

Если вы хотите извлечь пятый столбец из того, что содержит более 5 полных столбцов, вы можете использовать X [:, 4: 5]. Если вы хотите просмотреть строки 3-4 и столбцы 5-7, вы бы сделали X [3: 5,5: 8]. Надеюсь, вы получите эту идею.