如何在shape为(50,2)的np数组每行最小值索引处插入二进制1
你可以直接使用NumPy内置的向量化方法完成需求,比原有循环实现效率更高,同时行为和你原来的逻辑完全一致:
最优实现(无循环,适合大规模数组)
import numpy as np # 替换为你自己shape为(50,2)的np数组 input_arr = np.array([[2,4], [5,3]]) # 按行计算最小值对应的索引,axis=1指定按行维度计算 min_row_index = input_arr.argmin(axis=1) # 初始化和输入数组形状一致的全0数组 result = np.zeros_like(input_arr) # 给每行最小值对应位置赋值为1 result[np.arange(len(input_arr)), min_row_index] = 1
运行后result的输出即为你需要的0-1数组:
array([[1, 0], [0, 1]])
兼容你原有循环逻辑的实现
如果需要沿用你原来的循环写法,可参考如下代码:
import numpy as np input_arr = np.array([[2,4], [5,3]]) result = [] for row in input_arr: # 原有获取最小值索引的逻辑 min_pos = list(row).index(min(row)) # 生成当前行的0-1数组 cur_row = [0] * row.shape[0] cur_row[min_pos] = 1 result.append(cur_row) # 若需要输出为np数组,可添加下方代码 # result = np.array(result)
注:如果某行存在多个相等的最小值,两种实现都会取第一个出现的最小值位置设为1,和你原有逻辑的行为一致。
内容的提问来源于stack exchange,提问作者h21
相关产品推荐
相关产品推荐

