Создание вертикальных массивов NumPy в Python

Я использую NumPy в Python для работы с массивами. Вот как я использую для создания вертикального массива:

import numpy as np
a = np.array([[1],[2],[3]])

есть ли простой и более прямой способ создания вертикальных массивов?

3 ответов


можно использовать reshape или vstack :

>>> a=np.arange(1,4)
>>> a
array([1, 2, 3])
>>> a.reshape(3,1)
array([[1],
       [2],
       [3]])
>>> np.vstack(a)
array([[1],
       [2],
       [3]])

кроме того, вы можете использовать вещания для того чтобы изменить вашу массива:

In [32]: a = np.arange(10)
In [33]: a
Out[33]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [34]: a[:,None]
Out[34]: 
array([[0],
       [1],
       [2],
       [3],
       [4],
       [5],
       [6],
       [7],
       [8],
       [9]])

вы также можете использовать np.newaxis (См. Примеры здесь)

>>> import numpy as np
>>> np.arange(3)[:, np.newaxis]
array([[0],
       [1],
       [2]])

в качестве примечания

Я только что понял, что вы использовали,from numpy import *. Не делайте этого, так как многие функции из универсальной библиотеки Python перекрываются с numpy (например,sum). Когда ты import * С numpy вы теряете функциональность этих функций. Поэтому всегда используйте :

import numpy as np

который также легко ввести.


простота и прямота в глазах смотрящего.

In [35]: a = np.array([[1],[2],[3]])
In [36]: a.flags
Out[36]:
  C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  UPDATEIFCOPY : False
In [37]: b=np.array([1,2,3]).reshape(3,1)
In [38]: b.flags
Out[38]:
  C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True
  UPDATEIFCOPY : False

первый короче и владеет своими данными. Так что в некотором смысле дополнительные скобки-это боль, но это довольно субъективно.

или если вы хотите что-то более похожее на MATLAB, вы можете использовать np.matrix формат строки:

c=np.array(np.matrix('1;2;3'))
c=np.mat('1;2;3').A

но я обычно не беспокоюсь о флаге OWNDATA. Один из моих любимых образцов массивов:

np.arange(12).reshape(3,4)

другие способы:

np.atleast_2d([1,2,3]).T
np.array([1,2,3],ndmin=2).T
a=np.empty((3,1),int);a[:,0]=[1,2,3] # OWNDATA