首页 > 解决方案 > Numpy广播 - 使用变量值

问题描述

编辑:

由于我的问题表述得很糟糕,我决定重写它。

numpy 是否允许在不使用 Python 的标准列表理解的情况下创建带有函数的数组?

通过列表理解,我可以:

array = np.array([f(i) for i in range(100)])

具有 fa 给定的功能。

但是如果构造的数组真的很大,使用 Python 的列表会很慢并且会占用大量内存。

如果这种方式不存在,我想我可以先创建一个我想要的大小的数组

array = np.arange(100)

然后在它上面映射一个函数。

array = f(array)

根据另一篇文章的结果,这似乎是一个合理的解决方案。


假设我想使用带有简单 int 值的 add 函数,它将如下:

array = np.array([i for i in range(5)])
array + 5

但是现在如果我想要值(这里是 5)作为根据数组元素的索引而变化的东西怎么办。例如操作:

array + [i for i in range(5)]

我可以使用什么对象来为向量化操作中的变量值定义特殊规则?

标签: pythonnumpyvectorization

解决方案


对于您的具体示例,陪审团操纵的解决方案将用于numpy.arange()

In [4]: array + np.arange(5)
Out[4]: array([0, 2, 4, 6, 8])

一般来说,您可以找到一些 numpy ufunc 来完成您的自定义函数的工作,或者您可以在 python 函数中进行组合,然后返回一个 ndarray,例如:

def custom_func():
    # code for your tasks

    return arr

然后,您可以简单地将返回的结果添加到您已经定义的内容array中,如下所示:

array + cusom_func()

推荐阅读