代码中有很多不同的概念。让我们从最基本的开始。Pythonlists和{a2}有不同的索引方法。您还可以通过提供一个列表来构建numpy数组:S_list = [[1,2,3], [4,5,6], [7,8,9]]
S_array = np.array(S_list)
print(S_list)
print(S_array)
print(S_list[0][2]) # indexing element 2 from list 0
print(S_array[0,2]) # indexing element at position 0,2 of 2-dimensional array
这将导致:
^{pr2}$
所以对于您的第一行代码:np.array([[[S[i,j]] for i in range(order+1)] for j in range(order+1)])
通过提供一个列表,您正在构建一个numpy数组。这个列表是用list comprehension的概念构建的。因此np.array(...)方法中的代码:[[[S[i,j]] for i in range(order+1)] for j in range(order+1)]
。。。相当于:order = 2
full_list = []
for j in range(order+1):
local_list = []
for i in range(order+1):
local_list.append(S_array[i, j])
full_list.append(local_list)
print(full_list)
这将导致:[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
对于第二个代码片段,需要注意的是,尽管通常numpy数组具有非常特定和常量(对于所有数组)单元格类型,但实际上可以将数据类型对象赋给numpy数组。因此,创建一个二维列表数组是可能的。也可以创建一个三维数组。两者都与索引rm[i,j][k]兼容。您可以在以下示例中进行检查:rm = np.array(["A", 3, [1,2,3]], dtype="object")
print(rm, rm[2][0]) # Acessing element 0 of list at position 2 of the array
rm2 = np.zeros((3, 3, 3))
print(rm2[0, 1][2]) # This is also valid
以下代码:[rm[i,j][k]*someFuction(name,u[i],v[j])[k] for k in range(len(rm[i,j])) if rm[i,j][k]]
。。。可以这样写:some_list = []
for k in range(len(rm[i,j])):
if rm[i, j][k]: # Expecting a boolean value (or comparable)
a_list = rm[i,j][k]*someFuction(name,u[i],v[j])
some_list.append(a_list[k])
最后一个细节是tmp+=some_list。当您将两个列表相加时,它们将被连接在一起,如下面这个简单示例所示:tmp = []
tmp += [1, 2, 3]
print(tmp)
tmp += [4, 5, 6]
print(tmp)
结果是:[1, 2, 3]
[1, 2, 3, 4, 5, 6]
还要注意,将一个列表乘以一个数字实际上等于将列表相加几次。所以2*[1,2]将产生{}。在