Python中如何用NumPy定位数组最大元素并与[0,0]位置元素交换
NumPy二维数组最大值与首元素交换实现
你已经通过np.where获取到了最大值对应的索引集合,直接补充坐标提取、元素交换的逻辑即可,完整可运行代码如下:
import numpy as np r2 = np.array([[ 1.00657843, 63.38075613, 312.87746691], [375.25164461, 500. , 125.75493382], [437.6258223 , 250.50328922, 188.12911152]]) indices = np.where(r2 == r2.max()) # 提取最大值的行列坐标,当前场景最大值唯一,取第一个匹配项即可 max_r, max_c = indices[0][0], indices[1][0] # 利用Python多变量赋值完成交换,无需额外定义临时变量 r2[0, 0], r2[max_r, max_c] = r2[max_r, max_c], r2[0, 0] print(r2)
运行后输出和预期完全一致:
array([[500. , 63.38075613, 312.87746691], [375.25164461, 1.00657843, 125.75493382], [437.6258223 , 250.50328922, 188.12911152]])
注意事项
np.where返回的是对应维度的索引数组元组,二维数组下第一个元素存所有匹配值的行索引,第二个元素存列索引- 如果数组内存在多个等于最大值的元素,上述代码只会交换第一个匹配到的最大值,若需要处理所有重复最大值的场景,需要遍历索引数组逐个处理
- 不要直接先给
r2[0,0]赋最大值,会覆盖原r2[0,0]的值导致交换失败,用多变量赋值或者提前存储临时值都可以规避这个问题
内容的提问来源于stack exchange,提问作者Wiz123
相关产品推荐
相关产品推荐

