嗨,我已经尝试解决这个问题一段时间了,无法解决。
我需要逐列对(M,N,2)numpy数组中的值进行规范化(即:分别规范化[:,:,0]和[:,:,1])。
另一个挑战是,我必须忽略所有对值均为0的“行”。(即:[[m,n,:] == [0,0]))
以下是示例输入/输出:
输入:
np.array([[[1, 2],
[2, 3],
[5, 4]],
[[0, 0],
[1, 2],
[3, 0]],
[[0, 0],
[0, 0],
[0, 3]],
[[1, 7],
[-3, 3],
[2, 4]]])
输出:
np.array([[[0.5, 0.2857..],
[0.625, 0.4285..],
[1, 0.5714..]],
[[0, 0],
[0.5, 0.2857],
[0.75, 0]],
[[0, 0],
[0, 0],
[0.375, 0.4285]],
[[0.5, 1],
[0, 0.4285],
[0.625, 0.5714]]])
我必须在很多行上应用此功能〜100MB 预先感谢
PS:范数公式(x-min(x))/(max(x)-min(x))
答案 0 :(得分:1)
100MB并不是很大,所以也许只需掩盖您需要忽略的“行”就足够了:
arr = arr.astype(np.float64)
zero = (arr == 0).all(axis=2)
keep = arr[~zero]
low, high = keep.min(axis=0), keep.max(axis=0)
arr[~zero] = (keep - low) / (high - low)
给我
In [55]: arr
Out[55]:
array([[[0.5 , 0.28571429],
[0.625 , 0.42857143],
[1. , 0.57142857]],
[[0. , 0. ],
[0.5 , 0.28571429],
[0.75 , 0. ]],
[[0. , 0. ],
[0. , 0. ],
[0.375 , 0.42857143]],
[[0.5 , 1. ],
[0. , 0.42857143],
[0.625 , 0.57142857]]])