python - 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)]
我可以使用什么对象来为向量化操作中的变量值定义特殊规则?
解决方案
对于您的具体示例,陪审团操纵的解决方案将用于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()
推荐阅读
- java - GlassFish 4.1.2 中带有 Jersey 2.2 的“HTTP 403 禁止”
- java - 错误:
与属性不兼容 : (attr) 参考 [弱] - hadoop - MapReduce 输入输出选择性
- javascript - 下拉菜单和内容按国家/地区更改
- java - 在 C 中执行命令行命令并与之交互
- java - 在将记录插入 SQLite 表之前检查记录是否存在
- android - 使用 Vision API 放置 3D 面部过滤器
- global - 在全局宏的名称中使用局部宏
- bash - 我想删除322个文件名的前8个字符
- python - Python Boto3 - 如何在进程开始复制到另一个存储桶之前检查s3文件是否已完全写入