作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个分数数组作为输入,我想输出一个数组,每个分数都附有百分位数。我有意识地不使用 stats.percentileofscore()
因为我以此为契机来学习 numpy 数据处理和操作。
鉴于输入:
math_scores = np.array([51, 61, 45, 72, 78, 61, 84, 50, 42, 57])
print(scores_with_percentile)
成为:
[[51 35]
[61 60]
[45 15]
[72 75]
[78 85]
[61 60]
[84 95]
[50 25]
[42 5]
[57 45]]
math_scores = np.array([51, 61, 45, 72, 78, 61, 84, 50, 42, 57])
data_size = math_scores.shape
percentile_col = np.zeros(data_size, dtype=int)
for i, score in enumerate(math_scores):
count = (math_scores < score).sum()
freq = (math_scores == score).sum()
percentile_col[i] = (count + (0.5*freq))*100/data_size
scores_with_percentile = np.stack((math_scores, percentile_col), axis=1)
print(scores_with_percentile)
最佳答案
每当我们想要遍历同一个 numpy 数组的元素时,我们可以在新轴上创建另一个数组。因此我们可以在 2D 数组上使用 numpy 的矢量化函数。
math_scores = np.array([51, 61, 45, 72, 78, 61, 84, 50, 42, 57])
data_size = math_scores.shape
count = np.less(math_scores, math_scores[:,np.newaxis]).sum(axis=1)
freq = np.equal(math_scores,math_scores[:,np.newaxis]).sum(axis=1)
percentile_col = (count + (0.5*freq))*100/data_size
scores_with_percentile = np.stack((math_scores, percentile_col), axis=1)
print(scores_with_percentile)
[[51. 35.]
[61. 60.]
[45. 15.]
[72. 75.]
[78. 85.]
[61. 60.]
[84. 95.]
[50. 25.]
[42. 5.]
[57. 45.]]
关于python - 百分位计算 : Can I convert this for loop to a vector operation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59507933/
我是一名优秀的程序员,十分优秀!