修改numpy数组中的值

时间:2015-02-27 17:31:27

标签: python list python-3.x numpy

我们假设ab如下: -

a = np.arange(5)
b = [0,1,2]

我想要的是,对于排除b中的索引的索引,a中的值应该等于-1。 所以在上面的例子中 a将等于

a = array([0, 1, 2, -1, -1])

我知道有一种方法,即

a[list(set(a)-set(b))] = -1

但是花费了太多时间,并且在实际编写代码时导致了太多的复杂性。 一如既往,我正在寻找比上述方法更好的方法。 随意使用所需的任何工具。 另一个例子(以防万一): - 如果

a = np.arange(12)
b = [3,5,6]

然后我真正想要的是 a = array([-1, -1, -1, 3, -1, 5, 6, -1, -1, -1, -1, -1]) 附:不要担心,a的格式始终为np.arange(int),且b的值不超过a的长度

2 个答案:

答案 0 :(得分:3)

>>> a = np.arange(12)
>>> b = [3,5,6]
>>> a[~np.in1d(np.arange(len(a)), b)] = -1
>>> a
array([-1, -1, -1,  3, -1,  5,  6, -1, -1, -1, -1, -1])

答案 1 :(得分:3)

如果对象要创建一系列与其索引相同的值或-1,那么从所有-1开始并添加所需的数据可能更简单,而不是相反。< / p>

>>> a = np.full(12, -1, dtype=int)
>>> b = [3, 5, 6]
>>> a[b] = b
>>> a
array([-1, -1, -1,  3, -1,  5,  6, -1, -1, -1, -1, -1])