python - 意外的结果——具有常量函数的 numpy fromfunction

标签 python numpy

我期待 np.fromfunction(lambda i: 1, (4,), dtype=int) 返回 array([1, 1, 1, 1]),但它返回整数 1。有人可以向我解释为什么 numpy.fromfunction 会这样吗?这似乎与匿名函数的定义有关(即是否实际使用了函数的参数)。

>>> import numpy as np

>>> np.fromfunction(lambda i: i, (4,), dtype=int)
array([0, 1, 2, 3])

>>> np.fromfunction(lambda i: 1, (4,), dtype=int)
1

>>> np.fromfunction(lambda i: 1 + i*0, (4,), dtype=int)
array([1, 1, 1, 1])

编辑:澄清一下,我的最终目标不是使用此方法创建 array([1, 1, 1, 1])。相反,我正在调用

np.fromfunction(lambda i: **an expression that doesn't depend on i**, (n,))

换句话说,我试图通过重复调用某个函数来初始化一个 numpy 数组。 (在那个函数中调用了 np.random.random(),所以我没有进行多余的调用。)

最佳答案

@Warren Weckesser 已经解释了为什么会发生这种情况(NumPy 文档在这里有点误导,没有任何地方明确表示 fromfunction 需要一个向量)。如果你想让你的 lambda 函数与 fromfunction 一起工作,你可以显式地将它向量化:

In [1]: func = lambda i: 1
In [1]: vfunc = np.vectorize(func)
In [2]: np.fromfunction(vfunc, (4,), dtype=int)
Out[2]: array([1, 1, 1, 1])

但对于这个用例,我会想到

np.ones(4, dtype=int)

(也许乘以常数)会更好。

关于python - 意外的结果——具有常量函数的 numpy fromfunction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27612288/

相关文章:

python - 从 python numpy 和 Matlab 求解线性方程得到不同的答案

python - 如何将自定义字段添加到 InlineFormsets?

python - bool 二维数组的子区域

jquery - Django 表单未使用 Javascript 提交

python - 类型错误 : sequence item 0: expected str instance, 找到段落

python - 如何在python中找到两个numpy数组的最近点

python - Cython:声明无符号整数的正确方法

python - 如何在 numpy 矩阵中使用这个复数?

python - haystack 多字段搜索

python - 正则表达式提取嵌套模式