numpy数组列表的加权平均值

jm2pwxwz  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(109)

我有一个包含多个np数组的列表和另一个包含每个数组的权重的列表:

w = [1,3]
l2 = [np.array([3,3]), np.array([1,1])]

字符串
结果应该是

np.array([2.0, 2.0])


怎么办?

pepwfjgg

pepwfjgg1#

编辑:

我之前提供的方法是一种简单有效的方法来计算NumPy数组列表的加权平均值。但是,如果您喜欢更简洁的方式来实现相同的结果,则可以使用NumPy的average函数和weights参数。下面是如何做到这一点:

import numpy as np

l1 = [1, 3]
l2 = [np.array([3, 3]), np.array([1, 1])]

# Convert the list of weights to a NumPy array
weights = np.array(l1)

# Convert the list of arrays to a NumPy array
arrays = np.array(l2)

# Calculate the weighted average
weighted_avg = np.average(arrays, axis=0, weights=weights)

print(weighted_avg)

字符串
输出量:

array([1.5, 1.5])


带有weights参数的np.average函数允许您直接计算加权平均值,而无需分别显式计算加权和和总权重。它提供了一种简洁有效的方法来实现与前面的方法相同的结果。
要计算NumPy数组列表的加权平均值,您需要数组及其相应的权重。以下是您的操作方法:

import numpy as np

def weighted_average(arr_list, weights):
    # Check if the input arrays and weights have the same length
    if len(arr_list) != len(weights):
        raise ValueError("The length of arrays and weights must be the same.")

    # Convert the list of arrays into a NumPy array
    arr_list = np.array(arr_list)

    # Calculate the weighted sum
    weighted_sum = np.sum(arr_list * weights[:, np.newaxis], axis=0)

    # Calculate the total weight
    total_weight = np.sum(weights)

    # Calculate the weighted average
    weighted_avg = weighted_sum / total_weight

    return weighted_avg


使用示例:

# List of NumPy arrays
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
array3 = np.array([7, 8, 9])

# Corresponding weights
weights = np.array([0.3, 0.5, 0.2])

# Calculate the weighted average
result = weighted_average([array1, array2, array3], weights)
print(result)  # Output: [3.7 4.7 5.3]


在该示例中,具有权重[0.3,0.5,0.2]的阵列[1,2,3]、[4,5,6]和[7,8,9]的加权平均值是[3.7,4.7,5.3]。

相关问题