我有一个大小为10-by-10
的二进制矩阵。我想将给定索引处矩阵中的所有1's
更改为-1
我能够得到这样的东西
import numpy as np
mat = np.random.randint(2, size=(10, 10))
index = [6,7,8,9]
mat[(mat[index,:] == 1).nonzero()] = -1
print(mat)
当我打印这个时,我得到这样的东西
[[-1 0 -1 1 0 -1 -1 1 -1 0]
[ 1 0 1 -1 -1 1 -1 -1 -1 1]
[ 0 -1 1 0 -1 -1 -1 1 -1 0]
[-1 -1 -1 -1 -1 1 -1 1 -1 1]
[ 1 1 1 1 0 0 0 0 0 1]
[ 1 1 1 1 0 0 0 0 1 0]
[ 1 0 1 0 0 1 1 0 1 0]
[ 0 0 0 1 1 0 1 1 1 0]
[ 0 1 0 0 1 1 1 0 1 0]
[ 1 1 1 1 1 0 1 0 1 0]]
但这似乎是错误的,因为索引位于矩阵的末尾,我想要的是
[[ 1 0 1 1 0 1 1 1 1 0]
[ 1 0 1 1 1 1 1 1 1 1]
[ 0 1 1 0 1 1 1 1 1 0]
[ 1 1 1 1 1 1 1 1 1 1]
[ 1 1 1 1 0 0 0 0 0 1]
[ 1 1 1 1 0 0 0 0 1 0]
[-1 0 -1 0 0 -1 -1 0 -1 0]
[ 0 0 0 -1 -1 0 -1 -1 -1 0]
[ 0 -1 0 0 -1 -1 -1 0 -1 0]
[-1 -1 -1 -1 -1 0 -1 0 -1 0]]
我知道不需要
nonzero()
,因为我已经将内容与1
进行了比较,但这是我所能得到的最好的。我究竟做错了什么?有没有办法得到正确的答案?
最佳答案
使用numpy.where
选择基于mat
的条件元素:
import numpy as np
mat = np.random.randint(2, size=(10, 10))
index = [6,7,8,9]
mat[index,:] = np.where(mat[index,:],-1,mat[index,:])
print(mat)
根据原始值的真实性,这将覆盖给定的
mat
行。这些行中的原始值是1
时,它们将被-1
覆盖,否则将被保留。尽管请注意,如果您的二进制矩阵只有零和一,则可以翻转给定行中每个元素的符号,因为
0
对于此转换是不变的:mat[index,:] = -mat[index,:]
关于python - 在给定索引处替换所有1-numpy,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38088323/