如何在 numpy 数组中添加数组而不展平

问题描述 投票:0回答:2
>>> import numpy as np
>>> a = np.array([112,123,134,145])
>>> b = np.array([212,223,234])
>>> c = np.array([312,323])
>>> d = np.array([412])

>>> arr = np.hstack([a,b,c,d])
>>> arr
array([112, 123, 134, 145, 212, 223, 234, 312, 323, 412])

>>> arr = np.array([a,b,c,d])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (4,) + inhomogeneous part.
>>> 

预期数组 -

np.array([[112,123,134,145], [212,223,234], [312,323], [412]], ...)
python numpy multidimensional-array
2个回答
0
投票

不知道为什么这对你不起作用,因为它对我来说没有问题,而且你所做的是这种情况的常见方法(可以在here找到另一个例子)。

您可以尝试的另一种类似方法(不是特别有效,但可能会完成工作)只是附加一个空白列表,如下所示:

import numpy as np
a = np.array([112,123,134,145])
b = np.array([212,223,234])
c = np.array([312,323])
d = np.array([412])
e = []
for sublist in [a,b,c,d]:
    e.append(sublist)

老实说,你所做的不起作用似乎很奇怪,但我希望这有助于提供至少另一种选择。

我应该注意到,我确实遇到了一个专门用于处理嵌套可变大小数据的库,称为 Awkward Array


0
投票

numpy.hstack()
函数可用于沿水平轴连接两个或多个数组。但是,此函数会在连接数组之前将其展平。 所以你可以用这个代替:

import numpy as np

a = [112, 123, 134, 145]
b = [212, 223, 234]
c = [312, 323]
d = [412]
e = []

# Create a list of lists
list_of_lists = [a, b, c, d, e]

arr = np.array(list_of_lists)

print(arr)
© www.soinside.com 2019 - 2024. All rights reserved.