如何计算三角形相似矩阵的加权平均值
How to calculate weighted average on a traingular similarity matrix
我有一个像这样的三角相似矩阵。
[[3, 1, 2, 0],
[1, 3, 0, 0],
[1, 0, 0, 0],
[0, 0, 0, 0]]
如何在丢弃零元素的同时计算每行的加权平均值?
您可以沿第二个轴添加,然后除以 sum
每行 non-zero 个值的数量。然后 where
in np.divide
你可以划分 其中 满足条件,通过将其设置为指定 non-zero 值所在的掩码,你可以防止被零除错误:
a = np.array([[3, 1, 2, 0],
[1, 3, 0, 0],
[1, 0, 0, 0],
[0, 0, 0, 0]])
m = (a!=0).sum(1)
np.divide(a.sum(1), m, where=m!=0)
# array([2., 2., 1., 0.])
遍历每一行,然后遍历每个元素。遍历元素时,不要包含零。如果您只找到零元素,只需将零(或您想要的默认值)添加到您的列表中。
weighted_averages = []
for row in matrix:
total_weight = 0
number_of_weights = 0
for element in row:
if element != 0:
total_weight += element
number_of_weights += 1
if number_of_weights == 0:
weighted_averages.append(0)
else:
weighted_averages.append(total_weight/number_of_weights)
weighted_averages
在您的案例中返回为:
[2.0, 2.0, 1.0, 0]
您可以使用 numpy 计算加权平均值。
import numpy as np
a = np.array([
[3, 1, 2, 0],
[1, 3, 0, 0],
[1, 0, 0, 0],
[0, 0, 0, 0]
])
weights = np.array([1,2,3,4])
#create an mask where element is 0
ma = np.ma.masked_equal(a,0)
#take masked weighted average
ans = np.ma.average(ma, weights=weights,axis = 1)
#fill masked points as 0
ans.filled(0)
输出:
array([1.83333333, 2.33333333, 1. , 0. ])
就Python:
ar = [[3, 1, 2, 0],
[1, 3, 0, 0],
[1, 0, 0, 0],
[0, 0, 0, 0]]
weight = [1,2,3,4]
ans=[]
for li in ar:
wa = 0 #weighted average
we = 0 #weights
for index,ele in enumerate(li):
if ele !=0:
wa+=weight[index]*ele
we+=weight[index]
if we!=0:
ans.append(wa/we)
else:
ans.append(0)
ans
我有一个像这样的三角相似矩阵。
[[3, 1, 2, 0],
[1, 3, 0, 0],
[1, 0, 0, 0],
[0, 0, 0, 0]]
如何在丢弃零元素的同时计算每行的加权平均值?
您可以沿第二个轴添加,然后除以 sum
每行 non-zero 个值的数量。然后 where
in np.divide
你可以划分 其中 满足条件,通过将其设置为指定 non-zero 值所在的掩码,你可以防止被零除错误:
a = np.array([[3, 1, 2, 0],
[1, 3, 0, 0],
[1, 0, 0, 0],
[0, 0, 0, 0]])
m = (a!=0).sum(1)
np.divide(a.sum(1), m, where=m!=0)
# array([2., 2., 1., 0.])
遍历每一行,然后遍历每个元素。遍历元素时,不要包含零。如果您只找到零元素,只需将零(或您想要的默认值)添加到您的列表中。
weighted_averages = []
for row in matrix:
total_weight = 0
number_of_weights = 0
for element in row:
if element != 0:
total_weight += element
number_of_weights += 1
if number_of_weights == 0:
weighted_averages.append(0)
else:
weighted_averages.append(total_weight/number_of_weights)
weighted_averages
在您的案例中返回为:
[2.0, 2.0, 1.0, 0]
您可以使用 numpy 计算加权平均值。
import numpy as np
a = np.array([
[3, 1, 2, 0],
[1, 3, 0, 0],
[1, 0, 0, 0],
[0, 0, 0, 0]
])
weights = np.array([1,2,3,4])
#create an mask where element is 0
ma = np.ma.masked_equal(a,0)
#take masked weighted average
ans = np.ma.average(ma, weights=weights,axis = 1)
#fill masked points as 0
ans.filled(0)
输出:
array([1.83333333, 2.33333333, 1. , 0. ])
就Python:
ar = [[3, 1, 2, 0],
[1, 3, 0, 0],
[1, 0, 0, 0],
[0, 0, 0, 0]]
weight = [1,2,3,4]
ans=[]
for li in ar:
wa = 0 #weighted average
we = 0 #weights
for index,ele in enumerate(li):
if ele !=0:
wa+=weight[index]*ele
we+=weight[index]
if we!=0:
ans.append(wa/we)
else:
ans.append(0)
ans