我有
形式的两个嵌套列表[
[ [.3 .1 .2]
[.2 .1 .5]
... (224 lists)
[.6 .9 .4] ]
... (224 lists)
[ [.1 .7 .5]
[.3 .8 .4]
... (224 lists)
[.2 .6 .9] ]
]
我想对它进行以下操作。第1步:
a = 1st list items
b = 2nd list items
[
[ [a0-b0 a1-b1 a2-b2]
[.. .. ..]
... (224 lists)
[.. .. ..] ]
... (224 lists)
[ [.. .. ..]
[.. .. ..]
... (224 lists)
[.. .. ..] ]
]
步骤2:设a0-b0 = A0,a1-b1 = B0,a2-b2 = C0。
[ [sqrt(A0**2+B0**2+C0**2) .. ..]
... (224 lists)
[.. .. ..]
]
第3步:
# Let sqrt(A0**2+B0**2+C0**2) = z. So we get :
[ [z0 z1 z2]
... (224 lists)
[.. .. ..]
]
在第三步中,我们想要对嵌套列表的所有元素求和。
我的尝试:
# two nested lists are tupfl and t2
difflay1 = [ [ [0 for i in range(3)] for i in range(224)] for i in range(224)]
rtsqlay2 = [ [0 for i in range(3)] for i in range(224)]
for i in range(224):
for j in range(224):
for k in range(3):
difflay1[i][j][k] = tupfl[i][j][k] - t2[i][j][k]
for i in range(224):
for j in range(224):
for k in range(3):
alpha = difflay1[i][j][0]
beta = difflay1[i][j][1]
theta = difflay1[i][j][2]
rtsqlay2[i][k] = math.sqrt(alpha**2 + beta**2 + theta**2)
def nested_sum(L):
total = 0
for i in L:
if isinstance(i, list):
total += nested_sum(i)
else:
total += i
return total
print(nested_sum(rtsqlay2))
我不确定这段代码是否符合我的要求。但是,它会打印一些浮点数。如果这不对,错误在哪里或如何继续?
答案 0 :(得分:1)
你尝试使用numpy吗?使用numpy数组会使列表占用更少的空间,代码运行得更快,并且更容易运行。
要获取difflay1和rtsqlay2,您可以执行以下操作而不是循环
difflay1 = tufpl - t2
rtsqlay2 = np.sqrt(np.sum(np.square(difflay1),axis=2))
用于执行嵌套求和,已经有一个函数来执行此操作,称为np.sum(L)
总体而言,您的代码如下所示:
import numpy as np
tupfl = np.array(tupfl)
t2 = np.array(t2)
difflay1 = tufpl - t2
rtsqlay2 = np.sqrt(np.sum(np.square(difflay1),axis=2))
print(np.sum(rtsqlay2))
它更短,更容易调试,因为您可以立即看到任何问题。例如,在您的代码中,您将rtsqlay2定义为列表列表而不是列表列表。结果,对于每个i和k rtsqlay2[i][k]
被定义224次,对于j的每个值一次,并且仅保留最后一个。这表示代码表现不尽如人意,但不会引发错误。哪些numpy数组,这些错误变得更容易捕获