numpy数组的每个元素如何根据其相对值进行操作?

tnt*_*tnt 8 python numpy

假设我们有一个数组

a = np.array([10,30,50, 20, 10, 90, 0, 25])
Run Code Online (Sandbox Code Playgroud)

我想要的伪代码 -

if a[x] > 80 then perform funcA on a[x]
if 40 < a[x] <= 80 then perform funcB on a[x]
if a[x] <= 40 then perform funcC on a[x]
Run Code Online (Sandbox Code Playgroud)

使用numpy函数执行此操作的最简洁方法是什么?

Sve*_*ach 14

通常,您尝试避免在NumPy数组上进行任何Python循环 - 这就是您首先使用NumPy的原因.为了举例,我假设funcA()为所有元素添加1,funcB()添加2并funcC()添加3(请详细说明他们为更加量身定制的示例做了什么).要实现您的目标,您可以这样做:

subset_a = a > 80
subset_b = (40 < a) & (a <= 80)
subset_c = a <= 40
a[subset_a] += 1
a[subset_b] += 2
a[subset_c] += 3
Run Code Online (Sandbox Code Playgroud)

这使用NumPy高级索引.例如,a > 80求值为布尔值数组,可用于选择满足条件的数组中的条目.

  • @Spacedman - 做一个[40 <a <= 80]`你只需要做一个[(40 <a)&(a <= 80)]`你必须使用`&`而不是`和` ,你必须使用括号.`40 <a和a <= 80'不起作用.`(40 <a)&(a <= 80)`会. (5认同)

Rus*_*ove 8

看看numpy.piecewise.我想你想要:

np.piecewise( a, [a > 80, (40 < a) & (a <= 80), a <= 40], [funcA, funcB, funcC] )
Run Code Online (Sandbox Code Playgroud)