python - 调用 np.sum(np.fromiter(generator))
问题描述
我有一个返回 numpy 数组的生成器。例如,让它成为:
import numpy as np
a = np.arange(9).reshape(3,3)
gen = (x for x in a)
来电:
np.sum(gen)
在numpy 1.17.4上:
DeprecationWarning:不推荐调用 np.sum(generator),并且将来会给出不同的结果。改用 np.sum(np.fromiter(generator)) 或 python sum 内置。
尝试重构上述内容:
np.sum(np.fromiter(gen, dtype=np.ndarray))
我得到:
ValueError:无法从迭代器创建对象数组
上述说法有什么问题?
解决方案
问题是第二个参数,np.ndarray
在fromiter()
. Numpy fromiter期望一维并返回一维数组:
从可迭代对象创建一个新的一维数组。
因此,您不能从迭代器创建对象数组。此外.reshape()
,由于我在第一行中所说的,这也会引发错误。总而言之,这有效:
import numpy as np
a = np.arange(9)
gen = (x for x in a)
print(np.sum(np.fromiter(gen,float)))
输出:
36
推荐阅读
- javascript - 我有带有粒子的sketch.js,但粒子在我的导航栏上,所以链接不可点击
- python - 按频率对列表进行排序
- reactjs - 变量 JSX 进入危险地渲染 SetInnerHTML()
- c++ - 如何使 C++ #define 语句在 VScode 格式化后不换行?
- sql-server - 如何在 tSQLt 中查看测试结果?
- openstack - Ussuri:QCOW2-Win10-Client 导入 OpenStack 后无法启动
- ios - Corelocation - didUpdateLocations 永远不会被调用
- php - PHP SQL MYSQL 数据库名称有 bash (-) 使用 group_concat 不能打印正确的数据
- reactjs - 如何覆盖prime-react组件CSS样式?
- python - Compose 文件 '.\docker-compose.yml' 无效,因为:顶级属性“db”无效