python - 为每个 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,  17,  20],
   [19,  31,  3],
   [17,  24,  17]]).astype(np.float64)
print("raw metrics=", associateMetrics)

现在,我想为上面数组中的每一列分配不同的权重,然后对其进行标准化。例如。假设我想通过乘以 5、将第 2 列乘以 3、将最后一列乘以 2 来为第一列分配更高的权重。

如何在 python 中执行此操作?抱歉,对 python 和 numpy 有点陌生。

我只尝试了 1 列,但它不起作用:

# Assign weights to metrics
weightedMetrics = associateMetrics
np.multiply(2, weightedMetrics[:,0])
print("weighted metrics=", weightedMetrics)

最佳答案

你应该使用 numpy 的 array broadcasting 。这意味着较低维度的数组可以自动扩展,以使用较高维度(但兼容)的数组执行向量化操作。在您的具体情况下,您可以将 (4,3) 形状的数组与形状 (3,) 的一维权重数组相乘,并获得您想要的结果:

weightedMetrics = associateMetrics * np.array([5,3,2])

诀窍在于,您可以想象 numpy ndarray 具有领先的单例维度,沿着该维度广播是自动的。我的意思是,形状 (3,) 的 1d numpy 权重数组可以被认为具有领先的单例维度(但仅从广播的角度来看!)。很容易看出形状 (4,3)(1,3) 的数组应该如何相乘:后者的每个元素都必须用于完整的前者的列。

在非常一般的情况下,您甚至可以对形状为 (3,1,3,1,4) 的数组和形状为 (2 ,3,4,4)。重要的是,满足的维度应该一致,或者其中一个数组应该在该位置具有单一维度,并且允许其中一个数组更长(在前面)。

关于python - 为每个 numpy 列分配不同的权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35248159/

相关文章:

python - 循环中的累积加法

python - 将 CSV 文件读取到 Python 中的多个 NumPy 数组

python - 在 Python 中更改列表

c++ - 如何将数组的每个n个元素组合成一个元素

python - 完全嵌套 NumPy 结构化标量

java - 设置数组值 = 0 且缺少 return 语句

php - 将多个表单数组插入 MySQL 数据库的最佳方法是什么?

python - 解析Python文件中的所有方法和类

python - Django Rest框架权限和所有权

python - 导入错误 : Failed to import `pydot` . 请安装 `pydot` 。例如 `pip install pydot`