如何解读np.where结果?去除Numpy输出中(array...)格式的方法
解决Numpy中np.where结果格式问题+结果解读
嘿,作为Numpy新手遇到这种格式问题太正常了,我来一步步帮你捋清楚:
一、先搞定输出格式问题
你看到的(array([0]), array([2])),是因为np.where()返回的是包含numpy数组的元组。要去掉array(...)的格式,只需要把每个numpy数组转成普通Python列表就行,用.tolist()方法就能轻松实现。
把你代码里的打印行改成这样:
print('Row and Column of {} is {}'.format(arra1, (arra1loc[0].tolist(), arra1loc[1].tolist())))
运行后输出就会变成你想要的([0], [2])啦。
二、彻底读懂np.where的结果
np.where(condition)的返回值是一个元组,元组里的元素数量和你的数组维度一致:
- 对于二维数组,元组里有两个元素:第一个是所有满足条件的元素的行索引numpy数组,第二个是列索引numpy数组
- 两个索引数组里的元素是一一对应的,比如
(array([0]), array([2]))就明确表示:第0行第2列的位置找到了符合条件的元素 - 如果一行里有多个相同的最大值(比如某行有两个918),索引数组就会变成
(array([0, 0]), array([2, 3])),对应(0,2)和(0,3)两个位置
三、优化你的代码(可选)
你现在手动处理每行最大值的方式有点繁琐,其实可以用循环批量处理所有行,还能兼容一行多最大值的情况:
import numpy as np a = np.random.randint(1,1000,(3,4)) print('*** Contents of array a ***') print(a) print() # 遍历每一行,自动获取最大值和位置 for row_num in range(a.shape[0]): current_row_max = a[row_num].max() # 找到当前行中所有等于最大值的列索引 col_nums = np.where(a[row_num] == current_row_max)[0] for col_num in col_nums: print(f'Max of row {row_num} = {current_row_max}') print(f'Row and Column of {current_row_max} is ({row_num}, {col_num})') print()
内容的提问来源于stack exchange,提问作者prodoggy4life
相关产品推荐
相关产品推荐

