如何根据元素值对NumPy数组应用不同函数?
解决NumPy数组分条件处理元素的问题
咱们先梳理下你代码里的几个问题:
- 那个
myFunc函数不仅定义语法错了(缺括号),而且完全没被用到,属于多余代码; test()函数里的循环只是挨个处理元素,但没把结果收集起来,最后只返回了最后一个元素的值,自然出不来你想要的数组;- 用Python原生循环处理NumPy数组其实挺低效的,NumPy本身就有更简洁高效的向量化操作,咱们优先用这个。
下面给你两种可行的解决办法:
方法1:修复循环逻辑(适合理解基础流程)
如果想保留循环的思路,只需要把每个处理后的元素存到列表里,最后转成NumPy数组就行:
import numpy as np def test(): x = np.linspace(0, 1, 11) result = [] for i in x: if i < 0.5: result.append(i * 2) else: result.append(i + 1.0) return np.array(result) print(test())
方法2:NumPy向量化操作(推荐,更高效简洁)
用NumPy的np.where函数,一行就能搞定分条件处理,这也是处理NumPy数组的惯用写法:
import numpy as np x = np.linspace(0, 1, 11) result = np.where(x < 0.5, x * 2, x + 1.0) print(result)
或者用布尔索引的方式,逻辑更直观:
import numpy as np x = np.linspace(0, 1, 11) result = x.copy() # 对小于0.5的元素乘2 result[x < 0.5] *= 2 # 对大于等于0.5的元素加1 result[x >= 0.5] += 1.0 print(result)
运行上面任意一段代码,都会输出你期望的结果:
[0. 0.2 0.4 0.6 0.8 1.5 1.6 1.7 1.8 1.9 2. ]
内容的提问来源于stack exchange,提问作者W.Ellis
相关产品推荐
相关产品推荐

