【发布时间】:2021-04-25 23:34:56
【问题描述】:
有什么办法可以使这个工作吗?我正在处理的数组由None 组成,这意味着在处理中忽略该值。例如,我想规范化这个数组:
output = np.array([[1,2,None,4,5],[None,7,8,9,10]])
mu = np.mean(output, axis=(0,1), keepdims=True)
sd = np.std(output, axis=(0,1), keepdims=True)
normalized_output = (output - mu)/sd
预期结果:
array([[-1.5666989 , -1.21854359, None, -0.52223297, -0.17407766],
[ None, 0.52223297, 0.87038828, 1.21854359, 1.5666989 ]])
编辑:按照建议,最好使用 NaN 而不是 None。如何让它与 NaN 一起工作:
output = np.array([[1,2,np.NAN,4,5],[np.NAN,7,8,9,10]])
mu = np.mean(output, axis=(0,1), keepdims=True)
sd = np.std(output, axis=(0,1), keepdims=True)
normalized_output = (output - mu)/sd
print(normalized_output)
# array([[nan, nan, nan, nan, nan],
# [nan, nan, nan, nan, nan]])
【问题讨论】:
-
如果向量中没有 None,这是一个非常糟糕的信号:这意味着数组中的值是
object类型,因此所有相关的计算都没有优化。考虑使用原生的 NaN 值。 -
感谢您的意见。我不知道 None 对矢量有害。我可以使用
where将其更改为 NaN。根据您的建议更新了问题。 -
如果你想保持你的值是整数,使用掩码数组而不是 NaN。我认为 NaN 是错误计算的结果(例如 0/0),而掩码值表示该值的缺失:两个不同的东西。 NaN 通常用于两者,但这可能会导致混淆。
-
在计算平均值时也会考虑 NaN。有特殊的
nanmean函数,但在这里,我认为掩码数组更合适。 -
这能回答你的问题吗? NumPy: calculate averages with NaNs removed