numpy数组 - 替换特定值
我还没完全搞懂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)