import numpy as np
x=np.array([[45,2,3],[0,0,3],[7,89,9]])
x_1=x!=0
y=np.log((x+2), where=x_1)
y的位置(1,0)和(1,1)的值为9.88131e-323,为什么不只有2? 如果我只取x的对数,则这些值将为0(未修改)
答案 0 :(得分:1)
由于Rishabh提供了numpy解决方案,因此以下是使用内置数学库和列表推导(比numpy慢)的解决方案:
import math as m
import numpy as np
x=np.array([[45,2,3],[0,0,3],[7,89,9]])
y = np.array([[m.log(cell) if (cell != 0) else 2 for cell in row] for row in x])
答案 1 :(得分:0)
您可以像这样使用where
参数:
x=np.array([[45,2,3],[0,0,3],[7,89,9]])
zero_indices = x==0
non_zero_indices = x!= 0
y = np.log(x, where=non_zero_indices)
y = np.add(y, 2, where=zero_indices)
print(y)
输出:
[[ 0.00000000e+000 6.91973373e-310 6.91973641e-310]
[ 2.00000000e+000 2.00000000e+000 6.91973375e-310]
[ 6.91967302e-310 8.90000000e+001 3.95252517e-322]]