3D 차원 배열이 있습니다.
>>> M2 = np.arange(24).reshape((4, 3, 2))
>>> print(M2)
array([[[ 0, 1],
[ 2, 3],
[ 4, 5]],
[[ 6, 7],
[ 8, 9],
[10, 11]],
[[12, 13],
[14, 15],
[16, 17]],
[[18, 19],
[20, 21],
[22, 23]]])
축 = 0을 따라 특정 값의 백분위 수 순위를 계산하고 싶습니다.
예를 들어 값이 4 인 경우 출력은 다음과 같습니다.
[[0.25, 0.25],
[0.25, 0.25],
[0.25, 0.0]]
여기서 [0] [0]의 0.25는 [0, 6, 12, 18] 등에서 4의 백분위 수 순위입니다.
값 = 2.5 인 경우 출력은 다음과 같습니다.
[[0.25, 0.25],
[0.25, 0.0],
[0.0, 0.0]]
나는 사용 scipy.stats.percentileofscore
하려고 생각 했지만 이것은 다차원 배열에서 작동하지 않는 것 같습니다.
---------------------------- 편집하다 --------------------- ------
Evan의 의견으로 깨달음. 나는 scipy.stats.percentileofscore
.
percentile_rank_lst = []
for p in range(M2.shape[1]):
for k in range(M2.shape[2]):
M2_ = M2[:, p, k]
percentile_rank = (stats.percentileofscore(M2_, 4)) / 100
percentile_rank_lst.append(percentile_rank)
percentile_rank_nparr = np.array(percentile_rank_lst).reshape(M2.shape[1], M2.shape[2])
print(percentile_rank_nparr)
출력은 다음과 같습니다.
array([[0.25, 0.25],
[0.25, 0.25],
[0.25, 0.0]])
나는 이것이 일을한다고 생각한다.
def get_percentile(val, M=M2, axis=0):
return (M > val).argmax(axis)/ M.shape[axis]
get_percentile(4)
#array([[0.25, 0.25],
# [0.25, 0.25],
# [0.25, 0. ]])
get_percentile(2.5)
#array([[0.25, 0.25],
# [0.25, 0. ],
# [0. , 0. ]])
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다