gpt4 book ai didi

python - 获取给定数组值作为权重的平均(行,列)单元格?

转载 作者:行者123 更新时间:2023-11-30 23:30:22 27 4
gpt4 key购买 nike

我试图使用数组值作为权重来获取平均行/列位置。这似乎有效,但感觉不对:

a = numpy.random.ranf(size=(5,5))
normalized_a = a/numpy.nansum(a)

row_values = []
col_values = []
for row, col in numpy.ndindex(normalized_a.shape):
weight = int(normalized_a[row, col] * 100)
row_values.extend([row] * weight)
col_values.extend([col] * weight)

print "average row:", sum(row_values)/float(len(row_values))
print "average col:", sum(col_values)/float(len(col_values))

在 numpy 中是否有更有效的方法来做到这一点?

最佳答案

加快计算速度的一个基本见解是,由于在进行行(列)计算时,同一列(行)中的所有项目都会乘以相同的值,因此将它们加在一起然后相乘会更快结果按行(列)号。如果您的数组是 m x n,那么您必须执行的乘法次数就会从 2 * m * n 减少到 m + n。由于您正在执行乘法和加法,因此您可以使用 np.dot 来尝试提高性能的最后一点。基于 @mgilson 的测试:

def new3(normlized_a):
weights = numpy.floor(normalized_a * 100)
total_wt = np.sum(weights)
rows, cols = weights.shape
row_values = np.dot(weights.sum(axis=1), np.arange(rows)) / total_wt
col_values = np.dot(weights.sum(axis=0), np.arange(cols)) / total_wt
return row_values, col_values

这些是我的结果和时间:

(1.8352941176470587, 2.388235294117647)
(1.8352941176470587, 2.388235294117647)
(1.8352941176470587, 2.388235294117647)
(1.8352941176470587, 2.388235294117647)
timing!!!
2.59478258085
1.33357909978
1.0771122333
0.487124971828 #new3

关于python - 获取给定数组值作为权重的平均(行,列)单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20628976/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com