如何将垂直numpy数组(1D)恢复为通常的水平默认形式?

时间:2016-06-09 09:28:11

标签: python arrays numpy

好的,已多次询问如何将1D numpy数组转换为垂直数组。最常用的选项是,如果

In [2]: a = np.array([1, 2, 3, 4])
In [3]: a
Out[3]: array([1, 2, 3, 4])

我们通常会这样做:

In [5]: a = a[ : , np.newaxis]
In [6]: a
Out[6]:
array([[1],
     [2],
     [3],
     [4]])

因为我们知道a.T不起作用(具有更多数学背景的人,像我这样的CS,发现有点令人震惊......)。

我的问题是,如果你收到一个已经垂直的阵列(1D),你如何将其转换为水平?

2 个答案:

答案 0 :(得分:3)

在numpy中没有水平或垂直1D数组这样的东西。 1D阵列只是一维阵列。如果你想调用一个形状为(4, 1),一个"垂直"的二维数组,这是可以的。阵列。然后,具有形状(1, 4)的2D阵列将是水平的#34;阵列。在这种情况下,转置将按预期工作。

转置a[:, np.newaxis].T给出一个形状为(1, 4)的水平数组。您始终可以使用print(a.shape)检查数组的形状。如果您想返回一维数组,可以调用a.squeeze(),它将返回一个形状为(4,)的数组。

import numpy as np

a = np.array([1,2,3,4])
print("Array {0} has shape {1}.".format(a, a.shape))

print(a[:, None].shape)
print((a[:, None].T).shape)
print(a[:, None].squeeze().shape)

退货,

Array [1 2 3 4] has shape (4,).
(4, 1)
(1, 4)
(4,)

答案 1 :(得分:0)

除了从数组形状中删除一维条目的np.squeeze()旁边,您可以使用np.hstack()(水平顺序堆栈数组)或第二轴np.concatenate()

>>> a
array([[1],
       [2],
       [3],
       [4]])
>>> np.hstack(a)
array([1, 2, 3, 4])
>>> np.concatenate(a, axis=1)
array([1, 2, 3, 4])