编程中遇到了这样的一个问题:有一个四维数组,需要在其中两个维度上搜索最大值。假设原数组是array[x1,x2,x3,x4],那么就是要求一个max_array[x1,x2],其中max_array[x1,x2]表示对全部的 i j中 array[x1,x2,i,j]的最大值。
第一时间想到了用np.max()进行求解,但是网上搜索到的博客都只支持对一个轴进行求解。比如max(array, axis = 3)就是固定x1, x2, x4,然后搜索x3的最大值。当然可以通过两次调用max来实现我需要的功能,也就是np.max(np.max(array, axis=3), axis=2),但这一代码简直丑陋至极。
经过尝试和检索资料后发现,axis这一变量并非只能指定一个轴,而是可以支持多个轴的,下面来看实例。
a = np.random.randint(0,10, (2,2,2,2), dtype=np.int8)
print(a)
print('max:')
print(a.max(axis=(2,3)))
输出结果为:
[[[[4 6]
[0 3]]
[[1 5]
[1 9]]]
[[[6 9]
[1 9]]
[[7 6]
[7 3]]]]
max:
[[6 9]
[9 7]]
可见,max函数在这里实现了对轴2,3同时进行最大值的搜索,输出的数组被降低了两个维度。