2017-05-03 68 views
3

我在执行n维数组上的给定操作时遇到了问题。在具体的我有一个数组,其尺寸为5:在阵列的一个特定维度执行操作

In [223]: data.ndim 
Out[223]: 5 

,并等于形状:

In [224]: shape(data) 
Out[224]: (6, 26, 27, 6, 50) 

我想知道的是,如果有可能在执行操作所有其他维度的最后维度(例如max(data[0,0,0,0,:])),但不使用任何for循环。

我希望我已经够清楚了!感谢您的帮助

回答

6

out[i,j,k,l] = max(data[i,j,k,l,:])可以被拼写为以下

out = np.max(data, axis=-1) 
out = np.max(data, axis=4) 

一个通常是非常有用的保留尺寸虽然,因为out2[i,j,k,l,0] = max(data[i,j,k,l,:])。你可以通过这样做:

out2 = np.max(data, axis=-1, keepdims=True) 

所以out2.shape == (6, 26, 27, 6, 1) - 这是很方便的,因为现在它正确地播放反对输入。

欲了解更多信息,看看参数为ufunc.reduce,这summax周围

+0

由于既薄包装!我知道轴功能,但我没有得到的是我该如何执行任何其他操作。例如,现在我想通过除以我刚刚找到的最大值来规范化我的数据(仍然在谈论第五维),是否有可能没有任何for循环? – gian9

+0

这将是'data/np.max(data,axis = -1,keepdims = True)' – Eric

2

在numpy的大部分功能需要一个axis关键字参数用于此目的:

data.max(axis=4) 

这将找到在第5轴(他们从0开始)的最大值。结果将是形状(6, 26, 27, 6)