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

2024-05-19 00:21:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个numpy数组,例如:

theData= [[0, 1, 1, 1],[0, 1, 3, 1],[3, 4, 1, 3],[0, 1, 2, 0],[2, 1, 0, 0]]

如何用-1替换第一列中的所有0?在

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

^{pr2}$

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

这显然可以通过循环来完成。也可以通过将第一列提取为1D数组,在其中进行替换,然后将其转置到原始的第一列上来完成。但我怀疑有一种更快更像Python的方式来做这件事。也许在使用np.哪里,但我想不通。在


Tags: 方法numpy目标np方式数组pr2thedata
3条回答

只要不使用该列生成不同的对象,就可以直接为该列编制索引。检查以下示例:

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)

结果是:

^{pr2}$

如果您想用多个列作为子集,则必须使用np.哪里(). 在

示例:

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, 1]][theData[:, [0, 1]] == 0] = -1 # Notice it's [0, 1] instead of [0]
print(theData)

输出为:

^{pr2}$

所以数组(数据)没有改变。但如果你这么做

theData[np.where(theData[:, [0, 1]] == 0)] = -1
print(theData)

你得到了

[[-1  1  1  1]
 [-1  1  3  1]
 [ 3  4  1  3]
 [-1  1  2  0]
 [ 2  1  0  0]]

它看起来也更干净。在

尝试以下操作:

theData[theData[:,0]==0, 0] = -1

您也可以使用np.where。在

^{pr2}$

相关问题 更多 >

    热门问题