用1替换numpy数组中的多个元素

时间:2018-10-26 02:07:50

标签: python arrays numpy

在给定的numpy数组X中:

X = array([1,2,3,4,5,6,7,8,9,10])

我想分别用单个元素(2, 3)替换索引(7, 8)-1,例如:

X = array([1,2,-1,5,6,7,-1,10])

换句话说,我用奇异值替换了原始数组的索引(2, 3)(7,8)处的值。

问题是:周围是否有一种麻木的方式(即没有for循环和使用python列表)?谢谢。

注意:这不等同于用一个元素替换一个元素。关于用“单个”值替换多个值。谢谢。

3 个答案:

答案 0 :(得分:6)

使用numpy.delete的解决方案,类似于@pault,但由于它使用纯numpy索引,因此效率更高。但是,由于这种高效的索引编制,这意味着您不能将锯齿状的数组作为索引传递

设置

a = np.array([1,2,3,4,5,6,7,8,9,10])
idx = np.stack([[2, 3], [7, 8]])

a[idx] = -1
np.delete(a, idx[:, 1:])

array([ 1,  2, -1,  5,  6,  7, -1, 10])

答案 1 :(得分:4)

我不确定是否可以一步完成,但这是使用np.delete的一种方法:

import numpy as np
from operator import itemgetter

X = np.array(range(1,11))
to_replace = [[2,3], [7,8]]


X[list(map(itemgetter(0), to_replace))] = -1
X = np.delete(X, list(map(lambda x: x[1:], to_replace)))
print(X)
#[ 1  2 -1  5  6  7 -1 10]

首先,我们将每对的第一个元素替换为-1。然后我们删除其余元素。

答案 2 :(得分:2)

尝试np.put

np.put(X, [2,3,7,8], [-1,0]) # `0` can be changed to anything that's not in the array
print(X[X!=0]) # whatever You put as an number in `put`

因此,基本上使用put来为索引取值,然后删除零值。

或者如@khan所说,可以做超出范围的事情:

np.put(X, [2,3,7,8], [-1,np.max(X)+1])
print(X[X!=X.max()])

所有输出:

[ 1  2 -1  5  6  7 -1 10]