我在python中有一个3D二进制数组/列表,用于存储序列。我想遍历数组并打印出序列。 但是,对于python来说,我很努力地将内部循环的循环变量设置为某个值。
for r in range(9, len(resources)-9):
for i in items:
for j in items:
print('assign[',i,'][',j,'][',r,'] ==', assign[(r, i)][j].SolutionValue())
if assign[(r, i)][j].SolutionValue() ==1:
i=j
print('set i=j: i = ', i)
j=0
print('set j=0: j = ', j)
print()
请参见下面的部分解决方案:
assign[ 0 ][ 0 ][ 9 ] == 0.0
assign[ 0 ][ 1 ][ 9 ] == 0.0
assign[ 0 ][ 2 ][ 9 ] == 0.0
assign[ 0 ][ 3 ][ 9 ] == 0.0
assign[ 0 ][ 4 ][ 9 ] == 1.0
set i=j: i = 4
set j=0: j = 0
assign[ 4 ][ 5 ][ 9 ] == 0.0
assign[ 4 ][ 6 ][ 9 ] == 0.0
assign[ 1 ][ 0 ][ 9 ] == 1.0
在我的代码的if语句中,我想设置i = j并返回j = 0。似乎这适用于我,但不适用于j。另一个选择是打破内部循环,但是我认为在python中没有引用某些循环。
提前谢谢!
答案 0 :(得分:1)
您可以使用numpy遍历数组并打印序列:
import numpy
for e in numpy.array([[[1,2],[1,2]],[[1,2],[1,2]]]).flatten(): print(e)
只需将该列表替换为您的列表即可。
答案 1 :(得分:0)
下面的解释会有点通用,但是希望阅读后您将获得解决特定或更复杂的,处理高维数组的问题的基本知识。
让我们首先回顾一下在python中为数组分配空间的简单方法:
1d array: lst = [0]*K0
2d array: lst = [0]*K1*K0
3d array: lst = [0]*K2*K1*K0
4d array: lst = [0]*K3*K2*K1*K0
...
Nd array: lst = [0]*Kn*Kn-1*...*K0
最典型的尺寸数组是(1D,2D,3D,4D),而K0 / K1 / K2 / K3分别称为宽度/高度/深度/时间。
一旦分配了空间,剩下的所有知识就是如何索引这些数组,那么,让我们尝试找出如何计算索引数组:
1d: index = x0
2d: index = x1*k0 + x0
3d: index = x2*k1*k0 + x1*k0 + x0
4d: index = x3*k2*k1*k0 + x2*k1*k0 + x1*k0 + x0
...
Nd: index_n = xn*kn-1*kn-2*...*k0 + index_n-1
最典型的尺寸数组是(1D,2D,3D,4D),因此通常将x0 / x1 / x2 / x3分别称为x / y / z / t。
1d: lst = [0]*width
lst[x]
2d: lst = [0]*width*height
lst[y*width + x]
3d: lst = [0]*width*height*depth
lst[z*width*height + y*width + x]
4d: lst = [0]*width*height*depth*duration
lst[t*width*height*depth + z*width*height + y*width + x]
似乎您正在处理3d数组,因此如上所述,我们现在知道在python中分配3d数组的一种方法可以像这样:
lst = [0]*width*height*depth
和为这种数组建立索引(写或读)的一种可能方法是:
lst[z*width*height + y*width + x]
希望整个解释有助于澄清一些有关数组的问题,无论是使用python还是其他语言,其基本理论将始终相同,唯一的区别是可能存在其他更高效的分配方式那些语言上的/ index数组,仅此而已。