0

我有这样的简单数组

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

In [3]: x.shape
Out[3]: (4,)

但我不希望形状返回 (4,),而是 (4, 1 )。我怎样才能做到这一点?

4

5 回答 5

3

通常在 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)
于 2018-02-02T15:44:10.087 回答
2

或者,您可以自己重塑数组:

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))
于 2018-02-02T15:30:58.917 回答
2

如果你想要一个列向量使用

x2 = x[:, np.newaxis]
x2.shape  # (4, 1)
于 2018-02-02T15:27:36.587 回答
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)
于 2018-02-02T15:27:48.197 回答
0

您可以使用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]])

请注意,虽然这在击键方面很方便,但考虑到必须为每个列表元素构造一个元组对象,而重新塑造一个数组基本上是免费的,这有点浪费。所以不要在长列表上使用它。

于 2018-02-02T17:21:46.803 回答