堆叠numpy数组?

时间:2012-09-01 15:41:12

标签: python arrays numpy

我正在尝试使用numpy hstack水平堆叠数组,但无法使其工作。相反,它全部出现在一个列表中,而不是“矩阵式”2D阵列。

import numpy as np
y = np.array([0,2,-6,4,1])
y_bool = y > 0
y_bool = [1 if l == True else 0 for l in y_bool] #convert to decimals for classification
y_range = range(0,len(y))
print y
print y_bool
print y_range
print np.hstack((y,y_bool,y_range))

打印出来:

[ 0  2 -6  4  1]
[0, 1, 0, 1, 1]
[0, 1, 2, 3, 4]
[ 0  2 -6  4  1  0  1  0  1  1  0  1  2  3  4]

如何让最后一行看起来像这样:

[0 0 0
 2 1 1
-6 0 2
 4 1 3]

2 个答案:

答案 0 :(得分:4)

如果要创建2D数组,请执行以下操作:

print np.transpose(np.array((y, y_bool, y_range)))
# [[ 0  0  0]
#  [ 2  1  1]
#  [-6  0  2]
#  [ 4  1  3]
#  [ 1  1  4]]

答案 1 :(得分:2)

嗯,足够接近h是水平/列方式,如果你检查它的帮助,你会看到参见

vstack : Stack arrays in sequence vertically (row wise).
dstack : Stack arrays in sequence depth wise (along third axis).
concatenate : Join a sequence of arrays together.

修改:首先想到的是vstack,但是np.vstack(...).Tnp.dstack(...).squeeze()。除此之外,“问题”是数组是1D,你希望它们像2D一样,所以你可以这样做:

print np.hstack([np.asarray(a)[:,np.newaxis] for a in (y,y_bool,y_range)])

np.asarray就是为了防止其中一个变量是一个列表。 np.newaxis使它们成为2D,以便在连接时更清楚。