如何对形状为(1000,2048)的NumPy数组计算2048维均值向量?
解决方法
你的问题出在遍历和均值计算的维度上:原函数是对**每个样本(每行)计算均值,所以得到1000个单值(每个样本的平均),最终输出形状为(1000,)。而你需要的是对每个特征维度(每列)**计算所有样本的均值,得到2048维的向量。
最优解法:直接用NumPy的axis参数
NumPy的mean函数支持指定计算均值的轴,直接指定axis=0就能沿着样本维度(第0轴)计算每列的均值,一步到位,效率远高于手动循环:
import numpy as np def get_means(f_embeddings): return np.mean(f_embeddings, axis=0)
手动遍历的写法(如果需要循环实现)
如果一定要用遍历方式,需要遍历每个特征索引,然后提取所有样本在该索引上的特征值计算均值:
import numpy as np def get_means(f_embeddings): means = [] # 遍历2048个特征维度 for feature_idx in range(f_embeddings.shape[1]): # 取出所有样本的第feature_idx个特征,计算均值 feature_mean = np.mean(f_embeddings[:, feature_idx]) means.append(feature_mean) return np.array(means)
原函数问题的细节
原代码中for embedding in f_embeddings是遍历数组的第0轴,每次拿到的是一个形状为(2048,)的行向量(单张图像的特征),对其求均值会得到该图像所有特征的平均值(一个单值),最终收集1000个这样的值,所以输出形状为(1000,)。
内容的提问来源于stack exchange,提问作者Djanger
相关产品推荐
相关产品推荐

