说我有一个像这样的数组
import numpy as np
a = np.array([[2]*9 + [3]*9 + [4]*9])
a = a.reshape((-1,3, 3))
print(a)
哪个
[[[2 2 2]
[2 2 2]
[2 2 2]]
[[3 3 3]
[3 3 3]
[3 3 3]]
[[4 4 4]
[4 4 4]
[4 4 4]]]
例如,如果我想将轴0上的每个对象除以其最大值(仅获得1),该如何在不循环的情况下做到这一点?
答案 0 :(得分:1)
通过沿其行和列取np.max
,将ndarray
设置为keepdims=True
,以使a
除以第一个轴中每个a / np.max(a, axis=(1,2), keepdims=True)
的最大值。沿第一轴的最大值:
array([[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]],
[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]],
[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]]])
输出
class Handler {
handleReq = () => {
this.ctx = ctx;
};
testFunc = async () => {
};
}
export default (HandleReq = Handler.prototype.handleReq);
答案 1 :(得分:0)
基于以上答案,我认为将其扩展到不仅需要单个numpy函数的转换是有用的,例如使用最小值/最大值在[0,1]中进行归一化:
import numpy as np
np.random.seed(1)
def zero_one_normalize_3d(arr):
fs = np.min, np.max
arr_min, arr_max = [f(arr, axis = (1, 2), keepdims = True) for f in fs]
return (arr - arr_min) / (arr_max - arr_min)
def zero_one_normalize_2d(arr):
return (arr - arr.min()) / (arr.max() - arr.min())
points = 10000
x1 = np.random.normal(3, 10, points)
x2 = np.random.normal(6, 10, points)
x3 = np.random.normal(9, 10, points)
a = np.column_stack((x1, x2, x3))
a = a.reshape(-1, 10, 3)
print(np.alltrue(zero_one_normalize_3d(a)[0] == zero_one_normalize_2d(a[0])))
> True