我有一个numpy数组r,我需要计算一个标量函数,比如说np.sqrt(1-x**2)对这个数组中的每个元素x,但是,我想在x>1的任何时候返回函数的值为0,否则返回函数对x的值,最终结果应该是一个numpy标量数组。我怎么能写得最像Python呢?
r
np.sqrt(1-x**2)
x
x>1
7kqas0il1#
您可以使用numpy.where(condition,if condition holds,otherwise),因此np.where(x>1,0,np.sqrt(1-x**2))将是答案
numpy.where(condition,if condition holds,otherwise)
np.where(x>1,0,np.sqrt(1-x**2))
ctrmrzij2#
用简单的评价:
In [19]: f=lambda x:np.sqrt(1-x**2) In [20]: f(np.linspace(0,2,10)) C:\Users\paul\AppData\Local\Temp\ipykernel_1604\1368662409.py:1: RuntimeWarning: invalid value encountered in sqrt f=lambda x:np.sqrt(1-x**2) Out[20]: array([1. , 0.97499604, 0.89580642, 0.74535599, 0.45812285, nan, nan, nan, nan, nan])
这将产生nan和x>1的警告。np.where如其他答案所建议的那样可以将nan更改为0,但仍然会收到警告。警告可以被静音。但另一种选择是使用np.sqrt(和其他ufunc)的where参数:
nan
np.where
0
np.sqrt
ufunc
where
In [21]: f=lambda x:np.sqrt(1-x**2, where=x<=1, out=np.zeros_like(x)) In [22]: f(np.linspace(0,2,10)) Out[22]: array([1. , 0.97499604, 0.89580642, 0.74535599, 0.45812285, 0. , 0. , 0. , 0. , 0. ])
fjnneemd3#
y = np.where( r>1, #if r[i]>1: 0, #y[i]=0 np.sqrt(1-r**2) #else: y[i] = (1-r[i]**2) )
3条答案
按热度按时间7kqas0il1#
您可以使用
numpy.where(condition,if condition holds,otherwise)
,因此np.where(x>1,0,np.sqrt(1-x**2))
将是答案ctrmrzij2#
用简单的评价:
这将产生
nan
和x>1
的警告。np.where
如其他答案所建议的那样可以将nan
更改为0
,但仍然会收到警告。警告可以被静音。但另一种选择是使用np.sqrt
(和其他ufunc
)的where
参数:fjnneemd3#