使用条件对numpy数组计算标量函数

fxnxkyjh  于 2023-01-20  发布在  其他
关注(0)|答案(3)|浏览(105)

我有一个numpy数组r,我需要计算一个标量函数,比如说np.sqrt(1-x**2)对这个数组中的每个元素x,但是,我想在x>1的任何时候返回函数的值为0,否则返回函数对x的值,最终结果应该是一个numpy标量数组。
我怎么能写得最像Python呢?

7kqas0il

7kqas0il1#

您可以使用numpy.where(condition,if condition holds,otherwise),因此np.where(x>1,0,np.sqrt(1-x**2))将是答案

ctrmrzij

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])

这将产生nanx>1的警告。np.where如其他答案所建议的那样可以将nan更改为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.        ])
fjnneemd

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)
)

相关问题