python - 从列表理解和一般情况下有效地创建 numpy 数组

标签 python performance numpy

在我目前的工作中,我经常使用 Numpy 和列表​​推导式,为了获得最佳性能,我有以下问题:

如果我按如下方式创建 Numpy 数组,幕后实际会发生什么?

a = numpy.array( [1,2,3,4] )

我的猜测是python首先创建一个包含值的普通列表,然后使用列表大小分配一个numpy数组,然后将值复制到这个新数组中。这是正确的,还是解释器足够聪明地意识到列表只是中间值,而是直接复制值?

同样,如果我希望使用 numpy.fromiter() 从列表理解创建一个 numpy 数组:

a = numpy.fromiter( [ x for x in xrange(0,4) ], int )

这会导致在输入 fromiter() 之前创建一个中间值列表吗?

最佳答案

我相信您正在寻找的答案是使用 generator expressionsnumpy.fromiter .

numpy.fromiter((<some_func>(x) for x in <something>),<dtype>,<size of something>)

生成器表达式是惰性的 - 当您遍历它们时,它们会计算表达式。

使用列表推导生成列表,然后将其输入 numpy,而生成器表达式将一次生成一个。

Python 像大多数语言(如果不是全部的话)一样,从内到外评估事物,所以使用 [<something> for <something_else> in <something_different>]将创建列表,然后对其进行迭代。

关于python - 从列表理解和一般情况下有效地创建 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14372613/

相关文章:

python - Google身份验证问题: Authorized user info was not in the expected format,缺少字段refresh_token

mysql - 表列是否会增加select语句执行时间

python - 循环进行错误处理

php - 如何正确循环PHP中的数组键

mysql - 需要帮助优化 MySQL 查询 - 连接中的 OR 语句导致查询时间过长

python - 将 numpy 数组中的所有像素替换为单独数组中的像素,除非值为 0

python - 无法去除透明度,PIL getbbox() 和 Numpy 都不起作用

numpy - 使用 numpy 转置向量

python - 是否有 python (scipy) 函数来确定获得目标功率所需的参数?

python - 在 SciPy 中拟合分布时如何检查收敛性