Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将变量编入“索引”;至于;循环Python_Python_Loops_For Loop - Fatal编程技术网

将变量编入“索引”;至于;循环Python

将变量编入“索引”;至于;循环Python,python,loops,for-loop,Python,Loops,For Loop,我有以下Python代码 for i,j,k in itertools.product(range(theta),range(gamma),range(N)): L = (gamma[j]*math.pi)*((theta[i])**2) + x[n] 因为我有三个for循环,所以变量L本质上是一个三维矩阵。是否可以为变量L编制索引?类似于,L[i,j,k]。如果你想得到的是L的值,它被视为i,j,k的函数(为每个三元组i,j,k得到一个特定的L值),最简单的方法可能是把它变成一个散列

我有以下Python代码

for i,j,k in itertools.product(range(theta),range(gamma),range(N)):
    L = (gamma[j]*math.pi)*((theta[i])**2) + x[n]

因为我有三个for循环,所以变量L本质上是一个三维矩阵。是否可以为变量L编制索引?类似于,L[i,j,k]。

如果你想得到的是L的值,它被视为i,j,k的函数(为每个三元组i,j,k得到一个特定的L值),最简单的方法可能是把它变成一个散列,并使用一个三维元组作为索引

您的代码会变成这样:

L = {}
for i,j,k in itertools.product(range(theta),range(gamma),range(N)):
    L[(i,j,k)] = (gamma[j]*math.pi)*((theta[i])**2) + x[k]
注意,这样做并不是定义“矩阵”的所有单元格,只有实际包含某些内容的单元格,并且当元组索引不匹配时,您将不得不处理这种情况

当然,您也可以使用一个numpy矩阵,正如Mike67所建议的那样,当您实际上没有循环所有可能的θ、伽马和范围值,而只循环特定的有趣情况时,元组技巧将非常有用


PS:我在公式中将n改为k,因为我认为这是一个输入错误

如果你想得到的是L的值,它是I,j,k的函数(为每个三元组I,j,k得到一个特定的L值),最简单的方法可能是把它变成一个散列,并使用一个三维元组作为索引

您的代码会变成这样:

L = {}
for i,j,k in itertools.product(range(theta),range(gamma),range(N)):
    L[(i,j,k)] = (gamma[j]*math.pi)*((theta[i])**2) + x[k]
注意,这样做并不是定义“矩阵”的所有单元格,只有实际包含某些内容的单元格,并且当元组索引不匹配时,您将不得不处理这种情况

当然,您也可以使用一个numpy矩阵,正如Mike67所建议的那样,当您实际上没有循环所有可能的θ、伽马和范围值,而只循环特定的有趣情况时,元组技巧将非常有用


PS:我将公式中的n改为k,因为我认为这是一个输入错误

如果将numpy与多维数组一起使用,您可以使用itertools.product在数组的所有维度上迭代

import numpy as np

L = np.zeros((theta, gamma, N))
for i,j,k in itertools.product(range(theta),range(gamma),range(N)):
    L[i,j,k] = (gamma[j]*math.pi)*((theta[i])**2) + x[n]

如果将numpy与多维数组一起使用,则可以使用itertools.product在数组的所有维度上迭代

import numpy as np

L = np.zeros((theta, gamma, N))
for i,j,k in itertools.product(range(theta),range(gamma),range(N)):
    L[i,j,k] = (gamma[j]*math.pi)*((theta[i])**2) + x[n]

你能给我们一个3D矩阵的例子,以及你想要的输出吗?我想你应该使用
numpy
数组。我只是在寻找一种方法来索引变量L。目前,输出显示为向量,但正如你所见,L基本上是三维的。我喜欢你的第一个答案,如果你添加一些代码,你就可以引用L[i] [j][k],但在存储ref之前,您必须验证您是否拥有基本数组、数组数组数组,然后是支持3维的数组数组数组数组。使用索引元组作为键的哈希是一个非常优雅的解决方案。我认为您需要显示更多代码,以了解您想要做什么。是吗你试图构造一个三维数组,或者只是在每次迭代中提取一个
L
值,用在其他表达式中?你能给我们一个三维矩阵的例子,以及你想要的输出吗?我想你应该使用
numpy
数组。我只是在寻找一种方法来索引变量L。目前,输出显示为向量,但正如你所看到的,L基本上是三维的,我喜欢你的第一个答案,如果你添加一些代码,你就可以引用L[I][j][k],但在存储ref之前,您必须验证您是否拥有基本数组、数组数组数组,然后是支持3维的数组数组数组数组。使用索引元组作为键的哈希是一个非常优雅的解决方案。我认为您需要显示更多代码,以了解您想要做什么。是吗你想构建一个三维数组的值,或者只是在每次迭代中提取一个
L
值,用在其他表达式中?嗨,克里斯,碰巧,Mike67的回答对我的工作更有意义。所以让我选择他的答案,而不是你的答案。尽管如此,从你的回答中学习新的东西还是很有用的。@Nanda:当然,选择最好的答案swer,使用numpy方法通常比调用标准python更有效。我应该用mike67的simlar建议来完成我的答案。很高兴他这么做。嗨,克里斯,事实上,mike67的回答对我的工作更有意义。所以让我选择他的答案,而不是你的答案。尽管如此,从你的r中学习新的东西还是很有用的回答。@Nanda:当然,选择最佳答案,使用numpy方法通常比调用标准python更有效。我应该像mike67一样用一个简单的建议来完成我的答案。很高兴他这么做。谢谢,mike67。你的建议对我的应用程序更有效。谢谢,mike67。你的建议对我的应用程序更有效。