具有3D索引数组的4D数组切片

时间:2018-08-31 23:25:11

标签: python numpy multidimensional-array indexing argmax

我正在使用排名4 numpy数组进行形状(时间点,分量(应力/应变),元素节点,元素)的FEA数据处理。大型3D模型有数千个节点,因此尽可能地进行矢量化。

我需要解决的一件小事如下。假设我在每个元素节点的每个元素处都有六个唯一应力分量的时间历史记录:

In: sigma.shape
Out: (526L, 6L, 8L, 58L)
我有兴趣非常快地获取每个元素节点上每个组件的数值最大值(即在这种情况下,在526个时间点内达到的数值最大值),以计算用于峰谷计数的选通值。用argmax获取相关索引并从那里构造一个新数组很简单

dims = sigma.shape

maxIdx = argmax(abs(sigma),axis=0)
maxTensor = zeros(shape(maxIdx))
for i in range(dims[2]):
    for j in range(dims[3]):
         for k in range(6): 
               maxTensor[k,i,j] = sigma[maxIdx[k,i,j],k,i,j]

嵌套循环仍然出奇地快,但理想情况下,我想通过切片3D形状(6,8,58)数组来避免这种情况,该数组包含原始4D数组中应力分量的数值最大值。最有效的方法是什么?

请注意,我只能使用Numpy v1.6.2,否则使用numpy.max(abs(sigma),axis = 0)会很麻烦,但是直到v1.7.0才引入kwarg轴。

0 个答案:

没有答案