numpy广播-使用可变值

时间:2019-05-12 12:13:29

标签: python numpy vectorization

编辑:

由于我的问题表达得不好,我决定重写它。

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

有了列表理解功能,我可以:

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

具有给定功能。

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

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

array = np.arange(100)

然后在其上映射一个函数。

array = f(array)

According to results from another post,看来这是一个合理的解决方案。


假设我要使用具有简单int值的add函数,如下所示:

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

但是现在,如果我希望该值(此处为5)随着数组元素的索引而变化,该怎么办?例如操作:

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

我可以使用哪个对象为矢量化操作中的变量值定义特殊规则?

2 个答案:

答案 0 :(得分:0)

您可以像这样将两个数组加在一起:

Simple adding two arrays using numpy in python?

这假设您的“按索引变量”只是另一个数组。

答案 1 :(得分:0)

对于您的特定示例,陪审团操纵的解决方案是使用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()