【发布时间】:2017-08-30 20:04:03
【问题描述】:
给定一个 2x3 数组,我想计算 axis=0 的平均值,但只考虑大于 0 的值。
所以给定数组
[ [1,0],
[0,0],
[1,0] ]
我希望输出是
# 1, 0, 1 filtered for > 0 gives 1, 1, average = (1+1)/2 = 1
# 0, 0, 0 filtered for > 0 gives 0, 0, 0, average = 0
[1 0]
我当前的代码是
import numpy as np
frame = np.array([ [1,0],
[0,0],
[1,0] ])
weights=np.array(frame)>0
print("weights:")
print(weights)
print("average without weights:")
print((np.average(frame, axis=0)))
print("average with weights:")
print((np.average(frame, axis=0, weights=weights)))
这给了我
weights:
[[ True False]
[False False]
[ True False]]
average without weights:
[ 0.66666667 0. ]
average with weights:
Traceback (most recent call last):
File "C:\Users\myuser\project\test.py", line 123, in <module>
print((np.average(frame, axis=0, weights=weights)))
File "C:\Users\myuser\Miniconda3\envs\myenv\lib\site-packages\numpy\lib\function_base.py", line 1140, in average
"Weights sum to zero, can't be normalized")
ZeroDivisionError: Weights sum to zero, can't be normalized
我不明白这个错误。我做错了什么,如何获得所有大于零的值的平均值 axis=0?谢谢!
【问题讨论】:
-
0, 0, 0 filtered for > 0 gives 0, 0, 0... 不,它没有。您能否更准确地描述您希望如何处理没有发现积极因素的情况?结果应该总是0吗?结果应该是所有元素的平均值吗?是否应该估算其他值? -
加权平均值计算为平均数和权重的乘积之和除以权重之和。由于第二列的权重加起来为 0(三个都是
False),因此无法进行除法。 -
对发布的解决方案有何反馈?
标签: python arrays numpy average