如何获取Numpy数组每行最小值并转为列向量(适配Matlab语法)
Numpy按行提取最小值并转为列向量的实现
首先生成目标3×4数组:
import numpy as np data = np.array([[35, 20, 47, 39], [6, 17, 77, 85], [8, 25, 2, 3]])
通过np.argmin获取每行最小值的索引数组:
kmin = np.argmin(data, axis=1) # 输出:array([1, 0, 2])
直接使用data[:, kmin]会得到3×3数组,不符合需求。要得到列向量形式的每行最小值,有两种实用方法:
方法1:高级索引+reshape
利用行索引与kmin的一一匹配,提取对应元素后转为列向量:
# 生成行索引数组,与kmin的每个索引一一对应 row_indices = np.arange(data.shape[0]) # 提取每行对应最小值,再reshape为列向量 min_vals = data[row_indices, kmin].reshape(-1, 1)
输出结果:
[[20] [ 6] [ 2]]
方法2:使用np.take_along_axis(贴近Matlab逻辑)
该方法专门用于按指定轴的索引提取元素,将kmin转为列向量后直接提取,无需额外reshape,逻辑和Matlab语句data(1:n1,kmin,1)高度适配:
# 将kmin转为列向量,匹配原数组的列维度 kmin_col = kmin.reshape(-1, 1) # 沿axis=1(列方向)提取对应索引的元素 min_vals = np.take_along_axis(data, kmin_col, axis=1)
输出结果与方法1完全一致。
内容的提问来源于stack exchange,提问作者Standard
相关产品推荐
相关产品推荐

