繁体   English   中英

ValueError:在 numpy 数组上设置具有序列的数组元素

[英]ValueError: setting an array element with a sequence on numpy array

这是大数组的一个简单示例

   x = [[[1,2,3], "abs"], [[1,2,3], "abs"]]
   y = np.array(x)
   z = y[:, 0]
   z.astype('int') # This will throw an error

Output

z >> Out[9]: array([list([1, 2, 3]), list([1, 2, 3])], dtype=object)

有什么办法可以将它从 object 转换为 int 而无需对列表 x 进行迭代

我搜索了您的问题并遇到了: Using Numpy Vectorize on Functions that Return Vectors

所以我想你可以使用矢量化方法:

import numpy as np
x = [[[1,2,3], "abs"], [[1,2,3], "abs"]]
y = np.array(x)
z = y[:, 0]
def f(l):
    return np.array(l)

v = np.vectorize(f, signature='()->(n)')
k = v(z)

给出k为:

array([[1, 2, 3],
       [1, 2, 3]])

@hpaulj 还建议使用一种更简洁的方法np.vstack(z) ,它给出了相同的答案。

根据文档,vstack 的参数应该是“ndarrays 序列”,所以我认为传递列表序列并不完全正确,但我可以确认它确实有效。


最后,如果是我的代码,我会坚持简单的列表理解,这是最简单的方法,任何解决方案都必须执行某种形式的 for 循环将列表转换为 ndarray,所以为什么不只在 Python 中进行迭代。

>>> np.array([r[0] for r in x])
array([[1, 2, 3],
       [1, 2, 3]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM