迭代通过在Python中应用函数的两个numpy数组

时间:2017-09-06 21:15:22

标签: arrays python-3.x numpy

我有

import numpy as np
a = np.array([np.nan,2,3])
b = np.array([1,np.nan,2])

我想将函数应用于a,b,是否有一种快速的方法可以做到这一点。 (就像在Pandas,我们可以申请)

具体来说,我对a和b的平均值很感兴趣,但是当另一个数字丢失时,将平均值作为其中一个数字。

即。我想回来

 np.array([1,2,2.5])

以上例子。但是,我想在更一般的设置中知道答案(我想在一些numpy数组中应用一个操作元素)

2 个答案:

答案 0 :(得分:1)

您可以使用numpy.nanmean,忽略NaN s:

np.nanmean([a, b], axis=0)
# array([ 1. ,  2. ,  2.5])

答案 1 :(得分:1)

如果你想通过NumPy数组迭代一些自定义函数,效率为NumPy universal functions (ufunc),那么选择

以下是后者的示例,其中函数为exp(x) + log(y)(因为NumPy的ufuncs explog已经可用,这仅用于演示):

import numpy as np
import sympy as sym
from sympy.utilities.autowrap import ufuncify

x, y = sym.symbols('x y')
f = ufuncify([x, y], sym.exp(x) + sym.log(y))

现在应用f(np.array([1, 2, 3]), np.array([4, 5, 6]))将返回NumPy数组[4.10457619, 8.99849401, 21.87729639],其方式不是Python循环,而是调用(默认情况下)编译的Fortran代码。

(但在实践中,你可能会发现NumPy已经有一些ufunc可以做你想要的,如果以正确的方式组合。)