我已经阅读了大多数How to convert a boolean array to an int array,但我仍然处于亏损状态,如何(最有效地)将numpy
bool数组转换为int数组,但具有不同的值。例如,我有:
>>> k=np.array([True, False, False, True, False])
>>> print k
[ True False False True False]
我希望将其转换为数组,其中True表示为2,而False表示为5.
当然,我总能建立一个线性方程式:
>>> print 5-k*3
[2 5 5 2 5]
...虽然矢量化,但不必要地使用加法(减法)和乘法;此外,如果我想要相反的值(5表示True,2表示False),我基本上必须使用(并重新计算)不同的等式:
>>> print 2+k*3
[5 2 2 5 2]
...这对我来说有点可读性问题。
从本质上讲,这只是一个选择/映射操作 - 但我想在numpy
域中完成。我怎么能这样做?
答案 0 :(得分:8)
似乎numpy.where
正是您想要的:
>>> import numpy as np
>>> k = np.array([True, False, False, True, False])
>>> np.where(k, 2, 5)
array([2, 5, 5, 2, 5])
答案 1 :(得分:1)
好吧,似乎我必须创建一个包含两个不同值的np.array
(不是Python列表!):
>>> z=np.array([2,5])
>>> print z
[2 5]
...然后我可以简单地将布尔数组(k
)转换为int,并将其用作“distinct values array”(z
)中的选择索引:
>>> print z[k.astype(int)]
[5 2 2 5 2]
将[2,5]改为[5,2]也是微不足道的,所以这很好。
我只是不确定这是否是正确的方法(也就是说,可能存在类似(伪代码)k.asdistinctvalues([2,5])
之类的东西?)