在数组行的 Numpy 分位数计算中排除零
exclude zeros in Numpy quantile calculation of rows of an array
我有一个二维数组,每行的值为零。
[[5, 3, 2, 0, 0, 1, 6, 9, 11, 1, 4, 1],
[0, 0, 12, 0, 1, 0, 0, 2, 0, 30, 2, 2],
[120, 2, 10, 3, 0, 0, 2, 7, 9, 5, 0, 0]]
有没有办法通过在计算中排除零值来计算每行的0.75分位数?
例如,在第二行中,计算时只应使用6个非零值[12,1,2,30,2,2]
。我尝试使用 np.quantile()
但它会在计算中包含所有零值。似乎 Numpy 也没有 quantile()
的屏蔽数组 np.ma
版本。
您可以用 nan
替换零值并将数组传递给 np.nanquantile()
以计算非 nan
值的分位数
>>> arr = np.array([[5, 3, 2, 0, 0, 1, 6, 9, 11, 1, 4, 1],
[0, 0, 12, 0, 1, 0, 0, 2, 0, 30, 2, 2],
[120, 2, 10, 3, 0, 0, 2, 7, 9, 5, 0, 0]], dtype='f')
>>> arr[arr==0] = np.nan
>>> arr
[[ 5. 3. 2. nan nan 1. 6. 9. 11. 1. 4. 1.]
[ nan nan 12. nan 1. nan nan 2. nan 30. 2. 2.]
[120. 2. 10. 3. nan nan 2. 7. 9. 5. nan nan]]
>>> arr_quantile75 = np.nanquantile(arr, 0.75, axis=1) #by row-axis
>>> arr_quantile75
[5.75 9.5 9.25]
np.nanquantile()
沿指定轴计算数据的第 q 个分位数,同时 忽略 nan 值[来源]
我有一个二维数组,每行的值为零。
[[5, 3, 2, 0, 0, 1, 6, 9, 11, 1, 4, 1],
[0, 0, 12, 0, 1, 0, 0, 2, 0, 30, 2, 2],
[120, 2, 10, 3, 0, 0, 2, 7, 9, 5, 0, 0]]
有没有办法通过在计算中排除零值来计算每行的0.75分位数?
例如,在第二行中,计算时只应使用6个非零值[12,1,2,30,2,2]
。我尝试使用 np.quantile()
但它会在计算中包含所有零值。似乎 Numpy 也没有 quantile()
的屏蔽数组 np.ma
版本。
您可以用 nan
替换零值并将数组传递给 np.nanquantile()
以计算非 nan
值的分位数
>>> arr = np.array([[5, 3, 2, 0, 0, 1, 6, 9, 11, 1, 4, 1],
[0, 0, 12, 0, 1, 0, 0, 2, 0, 30, 2, 2],
[120, 2, 10, 3, 0, 0, 2, 7, 9, 5, 0, 0]], dtype='f')
>>> arr[arr==0] = np.nan
>>> arr
[[ 5. 3. 2. nan nan 1. 6. 9. 11. 1. 4. 1.]
[ nan nan 12. nan 1. nan nan 2. nan 30. 2. 2.]
[120. 2. 10. 3. nan nan 2. 7. 9. 5. nan nan]]
>>> arr_quantile75 = np.nanquantile(arr, 0.75, axis=1) #by row-axis
>>> arr_quantile75
[5.75 9.5 9.25]
np.nanquantile()
沿指定轴计算数据的第 q 个分位数,同时 忽略 nan 值[来源]