我有一个数组x
,我想对f
矩阵中满足某些条件的每个项目应用一个函数。Numpy 是否提供了一种机制来简化此操作?
这是一个例子。我的矩阵x
应该只包含独占范围内的元素(0, 1)
。但是,由于舍入误差,某些元素可能等于0
或1
。对于其中的每个元素x
都是0
我想要添加epsilon
的,对于每个元素正是1
我想要减去epsilon
的。
编辑:(此编辑是在我接受askewchan 的回答后进行的。)另一种方法是使用numpy.clip
.
我有一个数组x
,我想对f
矩阵中满足某些条件的每个项目应用一个函数。Numpy 是否提供了一种机制来简化此操作?
这是一个例子。我的矩阵x
应该只包含独占范围内的元素(0, 1)
。但是,由于舍入误差,某些元素可能等于0
或1
。对于其中的每个元素x
都是0
我想要添加epsilon
的,对于每个元素正是1
我想要减去epsilon
的。
编辑:(此编辑是在我接受askewchan 的回答后进行的。)另一种方法是使用numpy.clip
.
你可以这样做:
a = np.array([0,.1,.5,1])
epsilon = 1e-5
a[a==0] += epsilon
a[a==1] += -epsilon
这样做的原因是a==0
返回一个布尔数组,就像Валера Горбунов在他们的回答中提到的那样:
In : a==0
Out: array([True, False, False, False], dtype=bool)
然后,您将该数组用作 的索引a
,它公开了 whereTrue
但不是 where的元素False
。你可以用这个做很多事情,见http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html
抱歉,这不是更具体,但是您可以创建一个布尔数组,该数组对于满足您条件的每个位置具有 TRUE 值,对于不满足条件的位置具有 FALSE。
对于 [0, 1, 0, 0] 之类的东西,当测试 1 时,您将得到一个数组 [FALSE, TRUE, FALSE, FALSE]。在这种情况下,您可以执行 [0, 1, 0, 0] - (epsilon)[FALSE, TRUE, FALSE, FALSE] 并使 0 值不受影响。
您可以map()
按照http://docs.python.org/2/tutorial/datastructures.html#functional-programming-tools中的说明使用:
def applyEpsilon(value):
myEpsilon = 0.001
if value == 0:
return myEpsilon
elif value == 1:
return 1-myEpsilon
return value
inputList = [0, 0.25, 0.5, 0.75, 0.99, 1]
print map(applyEpsilon, inputList)
产量:
[0.001, 0.25, 0.5, 0.75, 0.99, 0.999]