NumPy数组-替换特定值

3

我还不太理解numpy数组引用。

我的数组中,前两列始终有一些负值是必要的,而其余列需要将它们的负值替换为0。我知道有各种方法可以做到这一点。让我困惑的部分是如何将其中一个方法与仅对超过2的列执行此操作结合起来。

示例数组:

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

期望的结果是,对于整个数组,任何负值都将被替换为0,除非它们是x或y。
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:)。
结果基本上就是Joe Kingston建议的内容。
list[:, 2:] = list[:, 2:].clip(0, None)

2
你需要在原地剪辑或将值重新分配回数组。例如:a[:,2:].clip(0, None, a[:,2:])a[:, 2:] = a[:,2:].clip(0, None) - Joe Kington

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接