numpy数组 - 替换特定值

3 投票
2 回答
2569 浏览
提问于 2025-04-18 17:26

我还没完全搞懂numpy数组的引用。

我有一些数组,其中前两列总是有一些必要的负值,而剩下的列需要把负值替换成0。我知道有很多方法可以做到这一点,可以参考这里。让我困惑的是,怎么把这些方法和只对第3列及之后的列进行操作结合起来。

示例数组:

[[x, y, flow, element1, element2, element3] [x, y, flow, element1, element2, element3] [x, y, flow, element1, element2, element3]]

我想要的结果是,对于整个数组,任何负值都要替换成0,前两列的值除外。

2 个回答

4

听起来你想要的是:

subset = array[:, 2:]
subset[subset < 0] = 0

或者用一种比较难读的单行代码:

array[:, 2:][array[:, 2:] < 0] = 0

作为一个更完整的例子:

import numpy as np

array = np.random.normal(0, 1, (10, 5))
print array

# Note that "subset" is a view, so modifying it modifies "array"
subset = array[:, 2:]
subset[subset < 0] = 0

print array
3

你需要对数组的某些部分进行剪切

大概是这样的:

a[2:].clip(0, None)

你可以用几种方法来实现这个。一个方法是使用for循环

for list in list_of_lists:
    list[2:] = list[2:].clip(0, None)

或者,你可以使用 [:, 2:] 这个写法,它是用来引用你的列表中的列表 (:),然后再获取所有子列表中的部分 (2:)。

最终的结果基本上就是乔·金斯顿所建议的:

list[:, 2:] = list[:, 2:].clip(0, None)

撰写回答