【发布时间】:2015-09-02 06:11:08
【问题描述】:
您好,我一直在阅读如何找到多维列表的最小值,但如果我有一个 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 个粒子碰撞所用的时间(冗余值,如 i-i 或 j-i 用值 100 填充(因为它足够大,min 函数无法检索它)。我需要最短的碰撞时间(因此是第 4 个元素比较)
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,即使我已经检查过它不是最小的元素。
【问题讨论】:
-
你能举个例子吗?简单的例子。
-
你应该考虑使用
numpy -
我已编辑帖子以获得更多信息。
标签: python list multidimensional-array