我有这样的简单数组
x = np.array([1,2,3,4])
In [3]: x.shape
Out[3]: (4,)
但我不希望形状返回 (4,),而是 (4, 1 )。我怎样才能做到这一点?
我有这样的简单数组
x = np.array([1,2,3,4])
In [3]: x.shape
Out[3]: (4,)
但我不希望形状返回 (4,),而是 (4, 1 )。我怎样才能做到这一点?
通常在 Numpy 中,您会使用two square brackets
. 对一维矩阵或向量使用单方括号是一种常见的误解。
这是一个例子:
a = np.array([[1,2,3,4], [5,6,7,8]])
a.shape # (2,4) -> Multi-Dimensional Matrix
以类似的方式,如果我想要一维矩阵,那么只需删除数据而不是外部square bracket
.
a = np.array([[1,2,3,4]])
a.shape # (1,4) -> Row Matrix
b = np.array([[1], [2], [3], [4]])
b.shape # (4, 1) -> Column Matrix
当您使用单个方括号时,它可能会给出一些奇怪的尺寸。
对于此类单维矩阵(就像您为多维矩阵输入数据),始终将您的数据括在另一个方括号中,而没有这些额外维度的数据。
另外: 你也可以随时重塑
x = np.array([1,2,3,4])
x = x.reshape(4,1)
x.shape # (4,1)
一条线:
x = np.array([1,2,3,4]).reshape(4,1)
x.shape # (4,1)
或者,您可以自己重塑数组:
arr1 = np.array([1,2,3,4])
print arr1.shape
# (4,)
arr2 = arr1.reshape((4,1))
print arr2.shape
# (4, 1)
您当然可以在创建数组时对其进行整形:
arr1 = np.array([1,2,3,4]).reshape((4,1))
如果您想按照@FHTMitchell 在评论中的建议更改数组:
arr1.resize((4, 1))
如果你想要一个列向量使用
x2 = x[:, np.newaxis]
x2.shape # (4, 1)
下面实现你想要的。但是,我强烈建议你看看为什么你需要shape
返回 (4, 1)。大多数矩阵类型的操作在没有这种显式转换的情况下都是可能的。
x = np.array([1,2,3,4])
y = np.matrix(x)
z = y.T
x.shape # (4,)
y.shape # (1, 4)
z.shape # (4, 1)
您可以使用zip
在 python(非 numpy)级别进行转置:
>>> a = [1, 2, 3, 4]
>>>
>>> *zip(a),
((1,), (2,), (3,), (4,))
>>>
>>> import numpy as np
>>> np.array([*zip(a)])
array([[1],
[2],
[3],
[4]])
请注意,虽然这在击键方面很方便,但考虑到必须为每个列表元素构造一个元组对象,而重新塑造一个数组基本上是免费的,这有点浪费。所以不要在长列表上使用它。