【问题标题】:How to stack numpy array with different shape [duplicate]如何堆叠具有不同形状的numpy数组[重复]
【发布时间】:2021-08-27 09:34:10
【问题描述】:

我想用这段代码堆叠数组。

a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([7, 8])
np.stack((a, b), axis=-1)

但它会返回

ValueError:所有输入数组必须具有相同的形状错误。

我希望输出是:

array([[[1, 2, 3], 7],
       [[4, 5, 6], 8]])

【问题讨论】:

  • 您确定要此np.object,还是在寻找array([[[1, 2, 3, 7], [[4, 5, 6, 8]])
  • 我正在寻找作为数组的对象([[[1, 2, 3], 7], [[4, 5, 6], 8]])
  • @MichaelSzczesny 它与定义具有不同行大小的 numpy 数组无关。我想连接这些数组,如预期输出所示。
  • 原来a是一个(n,3)数值数组;在组合数组中,它被分解为n (3,) 数组。要恢复a,您必须使用np.stack(res[:,0])。合并后的数组会占用更多内存,并且对于大多数操作来说会更难使用。

标签: python numpy


【解决方案1】:

我不认为这是一个有效的 numpy 数组。您可以通过让数组的 dtype 为 object 来做到这一点(可以是任何东西,包括不规则的序列,例如您的)。

data = [[[1, 2, 3], 7], [[4, 5, 6], 8]]

ar = np.array(data, dtype=object)

要构建data,您可以:

a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([7, 8])

data = [[_a, _b] for _a, _b in zip(a, b)]

【讨论】:

  • 我现在看到输出数组不能用 ( ` ) import numpy as np arr = np.array([[[1, 2, 3], 7], [[4, 5, 6] , 8]]) ( ` ) 如何在不写为的情况下将它们堆叠在对象上?
  • @user10397650 这就是我发布的代码的作用。如果它没有达到您的预期,请发布我的代码为您做了什么以及它与您的预期有何不同。
  • 我以代码为例。有 16000 行要堆叠。我不能将它们写在数据变量中。我正在寻找简单的方法来通过 numpy 将它们自动堆叠到对象中。
  • @user10397650 哦,我明白了,等一下。
【解决方案2】:

试试这个:

a = list(map(list, a))
b = list(b)
[[i,j] for i, j in zip(a,b)]

【讨论】:

  • 我在您的代码 data=[[i,j] for i, j in zip(a,b)] ar = np.array(data, dtype=object) print(ar) 之后添加了此代码。它返回 array([[list([1, 2, 3]), 7], [list([4, 5, 6]) , 8]], dtype=object) .如何去掉这个上的list()标签?
  • 需要把list转成numpy.array吗?
  • 是的,我需要它作为 numpy.array 。
  • 好的,我正在处理,请稍等
  • @user10397650,我认为,我们不能在 np.array 中删除 list,因为这个列表有多个不同类型的对象,强调这是列表。
猜你喜欢
  • 2016-11-20
  • 2021-12-29
  • 2017-12-23
  • 2017-03-12
  • 1970-01-01
  • 2013-05-12
  • 2012-09-11
  • 2019-04-22
相关资源
最近更新 更多