NxNx4列表中最少的第4个元素(Python)

时间:2015-09-02 06:11:09

标签: python list multidimensional-array

您好我一直在寻找最小的多维列表,但如果我有一个N x N x 4列表,我如何获得每个第4个元素之间的最小值?所有其他示例都是使用实际索引的小示例列表。我想我需要用N ....来定义指数。

[[[0,1,2,3],[0,1,2,3],...N],[[0,1,2,3],[0,1,2,3],...N].....N]

然后检索他们的指数。

我不知道该尝试什么。

如果有人对实际代码感兴趣:

relative = [[[[100] for k in range(5)] for j in range(N)] for i in range(N)]

以下内容是用满足数学方程的时间填充第4个元素。 relative的第0,第1,第2和第3个元素具有位置和速度。第4个点是i和第j个粒子碰撞所花费的时间(ii或ji等冗余值用100填充(因为它足够大,min函数不能检索它).I需要最短的碰撞时间(因此第四元素比较)

def time(relative):
i = 0
t = 0
while i<N: 
    j = i+1
    while j<N and i<N:
        rv = relative[i][j][0]*relative[i][j][2]+relative[i][j][1]*relative[i][j][3]     #Dot product of r and v
        if rv<0:
            rsquared = (relative[i][j][0])**2+(relative[i][j][1])**2
            vsquared = (relative[i][j][2])**2+(relative[i][j][3])**2
            det = (rv)**2-vsquared*(rsquared-diameter**2)
            if det<0:
                t = 100                        #For negative times, assign an arbitrarily large number to make sure min() wont pick it up.
            elif det == 0:
                t = -rv/vsquared
            elif det>0:
                t1 = (-rv+sqrt((rv)**2-vsquared*(rsquared-diameter**2)))/(vsquared)
                t2 = (-rv-sqrt((rv)**2-vsquared*(rsquared-diameter**2)))/(vsquared)
                if t1-t2>0:
                    t = t2
                elif t1-t2<0:
                    t = t1
        elif rv>=0:
            t = 100
        relative[i][j][4]=t                 #Put the times inside the relative list for element ij.
        j = j+1
    i = i+1
return relative

我试过了: t_fin = min(relative[i in range(0,N-1)][j in range(0,N-1)][4]) 哪个编译但总是返回100,即使我已经检查过它不是最小元素。

1 个答案:

答案 0 :(得分:0)

如果你想要NxNx4列表第4个元素的min

min([x[3] for lev1 in relative for x in lev1])