Создание вертикальных массивов 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