将numpy布尔数组转换为具有不同值的int

时间:2013-12-19 02:36:42

标签: python numpy

我已经阅读了大多数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域中完成。我怎么能这样做?

2 个答案:

答案 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])之类的东西?)