[英]MinMax scaling on numpy array multiple dimensions
如何以最有效的方式對數組的每個二維矩陣的“列”中的 XD-numpy 數組進行 minmax 歸一化。
例如,使用 3D 數組:
a = np.array([[[ 0, 10],
[ 20, 30]],
[[ 40, 50],
[ 60, 70]],
[[ 80, 90],
[100, 110]]])
進入規范化數組:
b = np.array([[[0., 0.],
[1., 1.]],
[[0., 0.],
[1., 1.]],
[[0., 0.],
[1., 1.]]])
a_min = a.min(axis=-2, keepdims=True)
a_max = a.max(axis=-2, keepdims=True)
out = (a - a_min) / (a_max - a_min)
出去:
array([[[0., 0.],
[1., 1.]],
[[0., 0.],
[1., 1.]],
[[0., 0.],
[1., 1.]]])
使用sklearn.preprocessing.minmax_scale
+ numpy.apply_along_axis
單次應用:
from sklearn.preprocessing import minmax_scale
a = np.array([[[0, 10], [20, 30]], [[40, 50], [60, 70]], [[80, 90], [100, 110]]])
a_scaled = np.apply_along_axis(minmax_scale, 1, a)
# a_scaled
[[[0. 0.]
[1. 1.]]
[[0. 0.]
[1. 1.]]
[[0. 0.]
[1. 1.]]]
廣播和簡單的列表理解
f= lambda ar:(ar==ar.max(axis=0)[None,:]).astype(int)
b = np.array([f(x) for x in a], dtype=float)
print(b)
output
array([[[0., 0.],
[1., 1.]],
[[0., 0.],
[1., 1.]],
[[0., 0.],
[1., 1.]]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.