python - 替换 numpy 数组中的值

标签 python arrays numpy indexing

我有两个 numpy 数组,都是 M×N。X 包含随机值。 Y 包含真/假。数组 A 包含 X 中需要替换的行的索引,值为 -1。我只想替换 Y 为真的值。

下面是一些代码:

M=30
N=40
X = np.zeros((M,N))  # random values, but 0s work too
Y = np.where(np.random.rand(M,N) > .5, True, False)
A=np.array([ 7,  8, 10, 13]), # in my setting, it's (1,4), not (4,)
for i in A[0]:
    X[i][Y[A][i]==True]=-1

然而,我真正想要的只是替换一些条目。列表 B 包含 A 中每个索引需要替换的数量。它已经排序,因此 A[0][0] 对应于 B[0],等等。另外,如果 A[i] = k,那么Y 中对应的行至少有 k 个为真。

B = [1,2,1,1]

然后对于每个索引 i(在循环中),

X[i][Y[A][i]==True][0:B[i]] = -1

这行不通。关于修复的任何想法?

最佳答案

不幸的是,我没有一个优雅的答案;然而,这有效:

M=30
N=40
X = np.zeros((M,N))  # random values, but 0s work too
Y = np.where(np.random.rand(M,N) > .5, True, False)
A=np.array([ 7,  8, 10, 13]), # in my setting, it's (1,4), not (4,)
B = [1,2,1,1]

# position in row where X should equal - 1, i.e. X[7,a0], X[8,a1], etc
a0=np.where(Y[7]==True)[0][0]
a1=np.where(Y[8]==True)[0][0]
a2=np.where(Y[8]==True)[0][1]
a3=np.where(Y[10]==True)[0][0]
a4=np.where(Y[13]==True)[0][0]

# For each row (i) indexed by A, take only B[i] entries where Y[i]==True.  Assume these indices in X = -1
for i in range(len(A[0])):
    X[A[0][i]][(Y[A][i]==True).nonzero()[0][0:B[i]]]=-1

np.sum(X) # should be -5
X[7,a0]+X[8,a1]+X[8,a2]+X[10,a3]+X[13,a4] # should be -5

关于python - 替换 numpy 数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18680211/

相关文章:

Python @property 设计

python - 使用redis_om(python)覆盖redis上的信息

arrays - 检测混合数组中的元素类型

python - Numpy 图像切片返回黑色补丁/错误值

arrays - 如何从numpy数组中删除空元素

python - 让 python 进程运行类似于 redis 进程的运行方式(在后台)

python - 在 python 命令行中多次使用同一选项

PHP/MySQL 更新顺序

arrays - 将大数组拆分为两个数组

python - 按行对 Pandas 列选择执行 scipy.stats 测试时出现 ValueError