Python 为每个numpy列指定不同的权重
我有以下numpy数组:Python 为每个numpy列指定不同的权重,python,arrays,numpy,Python,Arrays,Numpy,我有以下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,
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有点陌生
我只在一篇专栏文章中尝试过这一点,但它不起作用:
# Assign weights to metrics
weightedMetrics = associateMetrics
np.multiply(2, weightedMetrics[:,0])
print("weighted metrics=", weightedMetrics)
你应该利用numpy的。这意味着可以自动扩展低维数组,以对高维(但兼容)数组执行向量化操作。在您的特定情况下,您可以将
(4,3)
形状的数组与(3,)
形状的1d权重数组相乘,并获得您想要的:
weightedMetrics = associateMetrics * np.array([5,3,2])
诀窍在于,您可以想象numpyndarray
s具有领先的单态维度,沿着该维度广播是自动的。我的意思是,您的1d numpy weight数组的形状(3,)
可以被认为是具有领先的单态维度(但仅从广播的角度来看!)。很容易看出shape(4,3)
和(1,3)
的数组应该如何相乘:后者的每个元素都必须用于前者的整列
在非常一般的情况下,您甚至可以对shape
(3,1,3,1,4)
数组和shape(2,3,4,4)
数组进行算术运算。重要的是,满足的维度应该一致,或者其中一个数组在该位置应该有一个单态维度,并且其中一个数组允许更长(在前面) 我找到了答案。这就是我使用的:
print("weighted metrics=", np.multiply([ 1, 2, 3], associateMetrics))