【问题标题】:stacking numpy arrays?堆叠numpy数组?
【发布时间】:2012-09-01 15:41:12
【问题描述】:

我正在尝试使用 numpy hstack 水平堆叠数组,但无法使其正常工作。相反,它们都出现在一个列表中,而不是一个“看起来像矩阵”的二维数组。

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]

【问题讨论】:

  • 旁白:你可以简单地使用y_bool = (y > 0) * 1 代替。

标签: python arrays numpy


【解决方案1】:

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

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]]

【讨论】:

    【解决方案2】:

    好吧,h 足够接近水平/列,如果你检查它的帮助,你会在 See Also 下看到

    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() 会这样做。除此之外,“问题”是数组是一维的,你希望它们像二维一样,所以你可以这样做:

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

    np.asarray 是为了以防万一变量之一是列表。 np.newaxis 使它们成为 2D 以更清楚地连接时发生的情况。

    【讨论】:

    • 对于 OP 示例,np.dstack(...).squeeze()
    猜你喜欢
    • 1970-01-01
    • 2013-05-12
    • 2018-06-05
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    相关资源
    最近更新 更多