我使用两个相同大小的数组,如:
>>> a = [range(10)]
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = -a
>>> b
array([ 0, -1, -2, -3, -4, -5, -6, -7, -8, -9])
我想使用布尔"掩码"创建另一个数组,例如:
>>> m = (a % 2 == 0)
>>> m
array([ True, False, True, False, True, False, True, False, True, False], dtype=bool)
然后我创建了一个相同大小的第三个数组,并将其值改为if,如果m为True,则b的值为m,如果m为False:
>>> c = ones(10)
>>> c[m] = a[m]
>>> c[~m] = b[~m]
>>> c
array([ 0., -1., 2., -3., 4., -5., 6., -7., 8., -9.])
我想知道是否有办法在一次操作中完成最后三次操作(创建c)(特别是对于性能优化)。
做的问题:
c = a * m + b * m
当a或b中有NaN时,当它乘以零时,它仍会产生NaN。
PS:我给出的例子也适用于n维数组。
答案 0 :(得分:8)
您正在寻找numpy.where
:
c = numpy.where(m, a, b)
祝你好运。
答案 1 :(得分:0)
使用列表推导可以创建一些条件来确定要选择哪个列表?
result = [ a[i] if bol else b[i] for i, bol in enumerate(mask)]
然后你可以将一些函数应用到[i]或b [i],具体取决于你想要如何改变它们。