首页 > 解决方案 > 调用 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:无法从迭代器创建对象数组

上述说法有什么问题?

标签: pythonnumpy

解决方案


问题是第二个参数,np.ndarrayfromiter(). 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

推荐阅读