python - ValueError:在numpy数组上设置具有序列的数组元素
问题描述
这是大数组的一个简单示例
x = [[[1,2,3], "abs"], [[1,2,3], "abs"]]
y = np.array(x)
z = y[:, 0]
z.astype('int') # This will throw an error
输出
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 还提出了一种更简洁的方法 using np.vstack(z)
,它给出了相同的答案。
根据文档,vstack 的参数应该是“ndarrays 序列”,所以我认为传递列表序列并不完全正确,但我可以确认它确实有效。
最后,如果是我的代码,我会坚持简单的列表理解,这是最简单的方法,任何解决方案都必须执行某种形式的 for 循环将列表转换为 ndarray,所以为什么不直接在 Python 中进行迭代。
>>> np.array([r[0] for r in x])
array([[1, 2, 3],
[1, 2, 3]])
推荐阅读
- java - Flutter 医生说我有许可问题
- python - 获取“OSError:无法运行 gpg () - 它可能不可用。” python-gnupg 出错
- reactjs - Reactjs - window.addEventListener hashchange 仅在组件最初加载时才起作用
- javascript - 在 cypress 测试中获取文本的出现次数
- java - 如何从 .jar 创建 .exe
- android-videoview - Android 视频不适用于所有密度
- excel - 以编程方式将列转置为保持第一列的行,就像在 excel 2013 中一样
- angular - Angular NGRX 效果没有任何反应
- c++ - 局部变量的右值引用和移动
- php - 如何在 PHP 中从 IP 设置速率限制?