在Numpy数组的列内进行条件替换

Aar*_*son 2 python arrays replace numpy where

我有一个numpy数组,例如:

theData= [[0, 1, 1, 1],[0, 1, 3, 1],[3, 4, 1, 3],[0, 1, 2, 0],[2, 1, 0, 0]]
Run Code Online (Sandbox Code Playgroud)

如何用-1 替换第一列中的所有零

用替换整个数组中的所有零是很容易的theData[theData==0] = -1,所以我认为这样可以

theData[theData[:,0] == 0] = -1
theData[:,0 == 0] = -1
Run Code Online (Sandbox Code Playgroud)

但是对于第一列值为零的任何行,它们会将行中的所有值更改为-1。不是我的目标,我想将替换限制在第一列(或任何其他列)。

显然,这可以通过循环来完成。也可以通过将第一列提取为一维数组,在其中进行替换,然后将其转置复制到原始第一列上来完成。但我怀疑有一种更快,更Pythonic的方法可以做到这一点。也许使用np.where,但我不知道。

arm*_*ita 5

只要您不使用该列构建其他对象,就可以直接对该列建立索引。检查以下示例:

theData= np.array([[0, 1, 1, 1],[0, 1, 3, 1],[3, 4, 1, 3],[0, 1, 2, 0],[2, 1, 0, 0]])
print(theData)
theData[:,0][theData[:,0] == 0] = -1
print(theData)
Run Code Online (Sandbox Code Playgroud)

结果是这样的:

[[0 1 1 1]
 [0 1 3 1]
 [3 4 1 3]
 [0 1 2 0]
 [2 1 0 0]]
[[-1  1  1  1]
 [-1  1  3  1]
 [ 3  4  1  3]
 [-1  1  2  0]
 [ 2  1  0  0]]
Run Code Online (Sandbox Code Playgroud)