1 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
我認(rèn)為循環(huán)是你最好的希望,有一個(gè)緩慢和快速的方法來(lái)做到這一點(diǎn):
緩慢的方式:
def get_ratios(arr):
ni, nj, nk = arr.shape[:3]
last_dim = arr.shape[3]
new_arr = np.zeros(shape=(ni, nj, nk, last_dim, last_dim),
dtype=np.float64)
for i in range(ni):
for j in range(nj):
for k in range(nk):
week = arr[i, j, k]
ratio = week[:, 3].reshape(-1, 1) / week[:, 3]
new_arr[i, j, k] = ratio
return new_arr
get_ratios(weeks_5d)
印刷
array([[[[[1. , 0.49748744, 1.11235955],
[2.01010101, 1. , 2.23595506],
[0.8989899 , 0.44723618, 1. ]],
[[1. , 0.49748744, 1.11235955],
[2.01010101, 1. , 2.23595506],
[0.8989899 , 0.44723618, 1. ]]]]])
顯然,在 python 中循環(huán)數(shù)組很慢,但這numba就是發(fā)明的目的:
快速(呃)方式
from numba import njit
@njit
def get_ratios(arr):
ni, nj, nk = arr.shape[:3]
last_dim = arr.shape[3]
new_arr = np.zeros(shape=(ni, nj, nk, last_dim, last_dim),
dtype=np.float64)
for i in range(ni):
for j in range(nj):
for k in range(nk):
week = arr[i, j, k, :, 3]
for d1 in range(last_dim):
for d2 in range(last_dim):
new_arr[i, j, k, d1, d2] = week[d1] / week[d2]
return new_arr
get_ratios(weeks_5d)
印刷
array([[[[[1. , 0.49748744, 1.11235955],
[2.01010101, 1. , 2.23595506],
[0.8989899 , 0.44723618, 1. ]],
[[1. , 0.49748744, 1.11235955],
[2.01010101, 1. , 2.23595506],
[0.8989899 , 0.44723618, 1. ]]]]])
添加回答
舉報(bào)