>>> 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.
>>>
预期数组-
array([[112,123,134,145], [212,223,234], [312,323], [412]],
[[512,523,534,545], [612,623,634], [712,723], [812]], ...)
3条答案
按热度按时间u1ehiz5o1#
当你尝试创建一个“ragged”数组时,你必须指定
object
dtype:请记住,这样的数组比简单的数组列表好不了多少,也许更糟。
没有
object
dtype时得到的错误消息在不同版本中有所不同。它曾经是自动的,然后你得到一个警告,然后一个错误消息。现在你得到了这个错误。显然,从数值数组的Angular 来看,这样的数组是“次优”的。对于某些形状,您必须从
arr = np.empty(4, object)
开始,并从列表中插入数组。egmofgnx2#
numpy.hstack()
函数可用于沿沿着水平轴连接两个或多个数组。但是,这个函数会在连接数组之前将它们展平。所以你可以用这个代替:oxcyiej73#
不知道为什么这对你不起作用,因为它对我来说没有任何问题,你所做的是这种情况下的常见方法(另一个例子是here)。
你可以尝试的另一种类似的方法(不是特别有效,但可能会完成工作)就是像这样附加一个空白列表:
老实说,这似乎很奇怪,你所做的没有工作,但我希望这有助于提供至少另一种选择。
我应该注意到,我确实遇到过一个专门用于处理大小可变的嵌套数据的库,称为AwkwardArray