【问题标题】:How to use numpy's hstack?如何使用numpy的hstack?
【发布时间】:2013-12-03 08:04:12
【问题描述】:

我有一个大型 numpy.ndarray 数组,我想从中提取第 4 列和第 5 列并将这些列放入 2D 数组中。 [i,0] 元素应该是第 4 列的值,[i,1] 应该是第 5 列的元素。

我尝试使用 numpy.hstack 函数来执行此操作。

a = numpy.asarray([1, 2, 3, 4, 5])
for i in range(5):
    a = numpy.vstack([a, numpy.asarray([1, 2, 3, 4, 5])])

combined = np.hstack([a[:,3], a[:,4]])

但是,这只是给了我一个 nx1 数组。我尝试了多种使用连接的方法,如下所示:

combined = np.concatenate([a[:,3], a[:,4]])

combined = np.concatenate([a[:,3], a[:,4]], axis=1)

combined = np.concatenate([a[:,3].T, a[:,4].T])

我觉得 hstack 是我想要的功能,但我似乎无法弄清楚如何让它给我一个 nx2 数组。谁能指出我正确的方向?任何帮助表示赞赏。

【问题讨论】:

  • “特征”或任何带有 numpy 数组的东西是转置(.T)一维数组返回相同的东西。如果你真的要使用hstack,你需要先把它们做成多维的(或者使用atleast_2d或者类似的),或者使用vstack然后转置结果。
  • 也可以查看np.column_stack: stackoverflow.com/q/14741061/2379410

标签: python arrays numpy concatenation


【解决方案1】:

只需按如下方式切出您的数据:

X = [[0 1 2 3 4]
     [0 1 2 3 4]
     [0 1 2 3 4]
     [0 1 2 3 4]]

slicedX = X[:,3:5]

结果:

[[3 4]
 [3 4]
 [3 4]
 [3 4]]

【讨论】:

    【解决方案2】:

    你也可以使用zip:

    >>> c = numpy.array( zip( a[:, 3], a[:, 4]) )
    >>> c
    array([[4, 5],
           [4, 5],
           [4, 5],
           [4, 5],
           [4, 5],
           [4, 5]])
    

    【讨论】:

      【解决方案3】:

      我认为这会做你想要的:

      a[:,[3,4]]
      

      【讨论】:

      • 如果列是连续的,最好使用a[:, 3:5],它返回数组的视图,而不是副本。
      猜你喜欢
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-12
      • 2023-01-29
      • 2021-06-23
      相关资源
      最近更新 更多