好的,已多次询问如何将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),你如何将其转换为水平?
答案 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])