使用np.log()函数时如何保持某些值不变

时间:2018-07-12 08:13:16

标签: python numpy

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(未修改)

2 个答案:

答案 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]]