你只應該由你的數組的最後一維的平方和的平方根除以你的陣列。
In [1]: import numpy as np
In [2]: x = np.random.rand(1000, 500, 3)
In [3]: normed = x/np.sqrt((x**2).sum(axis=-1))[:,:,None]
#None could be np.newaxis
注意,如果要單獨計算規範然後通過規範劃分數組,你將需要確保形狀是兼容的,這如果你只是把一個(N,他們不會, M,3)陣列由(N,M)範數陣列組成。規範數組需要一個額外的維度,即(N,M,1),這可以實現(其中None
和np.newaxis
可以互換使用)。
normed[...,None], normed[:,:,None], normed.reshape(N, M, 1), etc...
這裏是原來的第一和最後一個值:
In [4]: x[(0, -1), (0, -1)]
Out[4]:
array([[ 0.36461324, 0.16861872, 0.53603133],
[ 0.37323254, 0.15314778, 0.1338908 ]])
現在範:
In [5]: normed[(0,-1),(0,-1)]
Out[5]:
array([[ 0.5443173 , 0.2517245 , 0.80022088],
[ 0.87805199, 0.36028936, 0.31498615]])