我有以下numpy数组:
from sklearn.decomposition import PCA
from sklearn.preprocessing import normalize
import numpy as np
# NumPy array comprising associate metrics
# i.e. Open TA's, Open SR's, Open SE's
associateMetrics = np.array([[11, 28, 21],
[27, 17, 20],
[19, 31, 3],
[17, 24, 17]]).astype(np.float64)
print("raw metrics=", associateMetrics)
现在,我想为上述数组中的每一列分配不同的权重。后来规范化了。例如。假设我想通过乘以5,多列2乘3和最后一列乘2来为第1列分配更高的权重。
我如何在python中执行此操作?对不起有点新的python和numpy。
我已经尝试了这个只有1列,但它不会工作:
# Assign weights to metrics
weightedMetrics = associateMetrics
np.multiply(2, weightedMetrics[:,0])
print("weighted metrics=", weightedMetrics)
答案 0 :(得分:3)
你应该使用numpy的array broadcasting。这意味着可以自动扩展低维数组,以使用更高(但兼容)的维数阵列执行向量化操作。在您的具体情况下,您可以将(4,3)
形数组与形状为(3,)
的1d权重数组相乘,并获得所需内容:
weightedMetrics = associateMetrics * np.array([5,3,2])
诀窍在于你可以想象numpy ndarray
具有领先的单身尺寸,广播是自动的。通过这个我的意思是你的1d numpy权重数组形状(3,)
可以被认为具有领先的单一维度(但仅从广播的角度来看!)。并且很容易看出形状(4,3)
和(1,3)
的数组应该如何相乘:后者的每个元素都必须用于前者的完整列。
在一般情况下,您甚至可以在形状(3,1,3,1,4)
和形状(2,3,4,4)
之一上使用算术运算。重要的是,满足要求的尺寸要么一致,要么其中一个阵列应该在该位置具有单个尺寸,并且允许其中一个阵列更长(在前面)。
答案 1 :(得分:0)
我找到了答案。这是我用过的:
print("weighted metrics=", np.multiply([ 1, 2, 3], associateMetrics))