假设我们有一个数组
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求值为布尔值数组,可用于选择满足条件的数组中的条目.
看看numpy.piecewise.我想你想要:
np.piecewise( a, [a > 80, (40 < a) & (a <= 80), a <= 40], [funcA, funcB, funcC] )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5407 次 |
| 最近记录: |