从多维数组访问第一个子数组
Access of first sub-array from a multi-dimensional array
我混淆了 shape
函数、len
函数和多维数组的第一个元素 F_matrix[0]
:
这里是下面代码的输出:
len(C_matrix) = 1
len(F_matrix) = 1
len(F_matrix).shape = (1, 8, 8)
len(F_matrix[0]) = 8
F_matrix[0] = [[ 4.56867353e+06 -4.99852287e+05 -1.26264284e+06 -5.49992651e+05
-5.16320280e+04 -1.29914316e+04 5.88986230e+02 -7.90882774e+04]
[-4.99852287e+05 3.69070386e+06 8.50885784e+04 -9.27921050e+04
-7.37865334e+05 1.30299311e+05 6.85201453e+04 -9.41043202e+05]
[-1.26264284e+06 8.50885784e+04 8.53288805e+05 2.63907061e+05
1.53895305e+04 -6.16652749e+04 -9.04745867e+03 -1.25665562e+04]
[-5.49992651e+05 -9.27921050e+04 2.63907061e+05 1.29887819e+05
3.52885203e+04 -1.63641173e+04 -4.59672776e+03 1.35727607e+04]
[-5.16320281e+04 -7.37865334e+05 1.53895305e+04 3.52885203e+04
1.74401118e+05 -2.17908075e+04 -1.52244782e+04 2.11406152e+05]
[-1.29914316e+04 1.30299311e+05 -6.16652749e+04 -1.63641173e+04
-2.17908075e+04 1.83645151e+04 4.09438482e+03 -1.96038555e+04]
[ 5.88986230e+02 6.85201453e+04 -9.04745867e+03 -4.59672776e+03
-1.52244782e+04 4.09438482e+03 1.69590361e+03 -1.74421374e+04]
[-7.90882774e+04 -9.41043202e+05 -1.25665562e+04 1.35727607e+04
2.11406152e+05 -1.96038555e+04 -1.74421374e+04 3.25613787e+05]]
因此,对于 F_matrix[0]
的第一个元素,我得到一个 8x8 = 64 个元素
但为什么我得到 len(F_matrix[0]) = 8
? F_matrix[0]
应该包含 64 个元素,对吗?
i,j,l = 1,0,0
while i < tri_len:
while j < i:
while s < len(C_matrix):
Mat_order[s] = 1./np.sqrt(np.linalg.det(np.array([[C_matrix[s][j][j],C_matrix[s][i][j]], [C_matrix[s][j][i],C_matrix[s][i][i]]])))
s=s+1
s=0
SSS = Mat_order.argsort()
Mat_order = Mat_order[SSS]
C_matrix = C_matrix[SSS]
couleur = couleur[SSS]
## DEBUG
##while l < len(F_matrix):
print 'len(C_matrix) = ', len(C_matrix)
print 'len(F_matrix) = ', len(F_matrix)
print 'len(F_matrix).shape = ', F_matrix.shape
print 'len(F_matrix[0]) = ', len(F_matrix[0])
while l < len(F_matrix):
## END
sq_tab_A = np.array([[C_matrix[l][j][j],C_matrix[l][i][j]], [C_matrix[l][j][i],C_matrix[l][i][i]]])
sq_tab_B = np.array([[C_matrix[l][j][j],C_matrix[l][i][j]], [C_matrix[l][j][i],C_matrix[l][i][i]]])
if (i != len(F_matrix[0])-1 and j!=0):
ellipsePlot_A=plt_ell2(C_matrix[l][j][j],C_matrix[l][i][i],C_matrix[l][i][j],[fid_values[j],fid_values[i]],sq_tab_A,'0.8',couleur[l],2.48,0.8,"","",minx[j],maxx[j],minx[i],maxx[i],tri_len,tri_len,tri_len*i+(j+1),i,j)
elif (i != len(F_matrix[0])-1):
ellipsePlot_A=plt_ell2(C_matrix[l][j][j],C_matrix[l][i][i],C_matrix[l][i][j],[fid_values[j],fid_values[i]],sq_tab_A,'0.8',couleur[l],2.48,0.8,"",x[i],minx[j],maxx[j],minx[i],maxx[i],tri_len,tri_len,tri_len*i+(j+1),i,j)
elif (j != 0):
ellipsePlot_A=plt_ell2(C_matrix[l][j][j],C_matrix[l][i][i],C_matrix[l][i][j],[fid_values[j],fid_values[i]],sq_tab_A,'0.8',couleur[l],2.48,0.8,x[j],"",minx[j],maxx[j],minx[i],maxx[i],tri_len,tri_len,tri_len*i+(j+1),i,j)
else:
ellipsePlot_A=plt_ell2(C_matrix[l][j][j],C_matrix[l][i][i],C_matrix[l][i][j],[fid_values[j],fid_values[i]],sq_tab_A,'0.8',couleur[l],2.48,0.8,x[j],x[i],minx[j],maxx[j],minx[i],maxx[i],tri_len,tri_len,tri_len*i+(j+1),i,j)
l=l+1
l=0
j=j+1
i=i+1
j=0
我希望能理解为什么我没有得到维度为 (1,8,8) 的多维数组 F_matrix
的 64 个元素。
如果你仔细观察,你会发现F_matrix[0]
由8个子数组(一维数组)组成。因此你得到 len(F_matrix[0])
作为 8。此外,这 8 个子数组中的每一个都包含 8 个元素,所以你总共有 8x8 = 64 个元素。
现在如果你这样做
len(F_matrix[0][0])
您会看到它的结果也是 8。由于您有 8 个子数组,因此 F_matrix[0]
的索引 运行 从 0 到 7。具体来说,每个
其长度为 8 作为
print (len(F_matrix[0][0])) # 8
print (len(F_matrix[0][1])) # 8
print (len(F_matrix[0][2])) # 8
.
.
.
print (len(F_matrix[0][7])) # 8
编辑
要获得一般多维数组中的元素总数,您首先需要将所有维度展平为一维,然后计算长度。因此,对于您的示例,要获得长度 (64),您可以执行
print (len(F_matrix.flatten()))
len(F_matrix[0])
表示第一个维度的长度(大小)。由于您有一个 3d 数组 (1,8,8)
,F_matrix[0]
的长度表示包含多少个其他元素(可以是数组或列表等)。这些元素本身可以是多维的。
我混淆了 shape
函数、len
函数和多维数组的第一个元素 F_matrix[0]
:
这里是下面代码的输出:
len(C_matrix) = 1
len(F_matrix) = 1
len(F_matrix).shape = (1, 8, 8)
len(F_matrix[0]) = 8
F_matrix[0] = [[ 4.56867353e+06 -4.99852287e+05 -1.26264284e+06 -5.49992651e+05
-5.16320280e+04 -1.29914316e+04 5.88986230e+02 -7.90882774e+04]
[-4.99852287e+05 3.69070386e+06 8.50885784e+04 -9.27921050e+04
-7.37865334e+05 1.30299311e+05 6.85201453e+04 -9.41043202e+05]
[-1.26264284e+06 8.50885784e+04 8.53288805e+05 2.63907061e+05
1.53895305e+04 -6.16652749e+04 -9.04745867e+03 -1.25665562e+04]
[-5.49992651e+05 -9.27921050e+04 2.63907061e+05 1.29887819e+05
3.52885203e+04 -1.63641173e+04 -4.59672776e+03 1.35727607e+04]
[-5.16320281e+04 -7.37865334e+05 1.53895305e+04 3.52885203e+04
1.74401118e+05 -2.17908075e+04 -1.52244782e+04 2.11406152e+05]
[-1.29914316e+04 1.30299311e+05 -6.16652749e+04 -1.63641173e+04
-2.17908075e+04 1.83645151e+04 4.09438482e+03 -1.96038555e+04]
[ 5.88986230e+02 6.85201453e+04 -9.04745867e+03 -4.59672776e+03
-1.52244782e+04 4.09438482e+03 1.69590361e+03 -1.74421374e+04]
[-7.90882774e+04 -9.41043202e+05 -1.25665562e+04 1.35727607e+04
2.11406152e+05 -1.96038555e+04 -1.74421374e+04 3.25613787e+05]]
因此,对于 F_matrix[0]
的第一个元素,我得到一个 8x8 = 64 个元素
但为什么我得到 len(F_matrix[0]) = 8
? F_matrix[0]
应该包含 64 个元素,对吗?
i,j,l = 1,0,0
while i < tri_len:
while j < i:
while s < len(C_matrix):
Mat_order[s] = 1./np.sqrt(np.linalg.det(np.array([[C_matrix[s][j][j],C_matrix[s][i][j]], [C_matrix[s][j][i],C_matrix[s][i][i]]])))
s=s+1
s=0
SSS = Mat_order.argsort()
Mat_order = Mat_order[SSS]
C_matrix = C_matrix[SSS]
couleur = couleur[SSS]
## DEBUG
##while l < len(F_matrix):
print 'len(C_matrix) = ', len(C_matrix)
print 'len(F_matrix) = ', len(F_matrix)
print 'len(F_matrix).shape = ', F_matrix.shape
print 'len(F_matrix[0]) = ', len(F_matrix[0])
while l < len(F_matrix):
## END
sq_tab_A = np.array([[C_matrix[l][j][j],C_matrix[l][i][j]], [C_matrix[l][j][i],C_matrix[l][i][i]]])
sq_tab_B = np.array([[C_matrix[l][j][j],C_matrix[l][i][j]], [C_matrix[l][j][i],C_matrix[l][i][i]]])
if (i != len(F_matrix[0])-1 and j!=0):
ellipsePlot_A=plt_ell2(C_matrix[l][j][j],C_matrix[l][i][i],C_matrix[l][i][j],[fid_values[j],fid_values[i]],sq_tab_A,'0.8',couleur[l],2.48,0.8,"","",minx[j],maxx[j],minx[i],maxx[i],tri_len,tri_len,tri_len*i+(j+1),i,j)
elif (i != len(F_matrix[0])-1):
ellipsePlot_A=plt_ell2(C_matrix[l][j][j],C_matrix[l][i][i],C_matrix[l][i][j],[fid_values[j],fid_values[i]],sq_tab_A,'0.8',couleur[l],2.48,0.8,"",x[i],minx[j],maxx[j],minx[i],maxx[i],tri_len,tri_len,tri_len*i+(j+1),i,j)
elif (j != 0):
ellipsePlot_A=plt_ell2(C_matrix[l][j][j],C_matrix[l][i][i],C_matrix[l][i][j],[fid_values[j],fid_values[i]],sq_tab_A,'0.8',couleur[l],2.48,0.8,x[j],"",minx[j],maxx[j],minx[i],maxx[i],tri_len,tri_len,tri_len*i+(j+1),i,j)
else:
ellipsePlot_A=plt_ell2(C_matrix[l][j][j],C_matrix[l][i][i],C_matrix[l][i][j],[fid_values[j],fid_values[i]],sq_tab_A,'0.8',couleur[l],2.48,0.8,x[j],x[i],minx[j],maxx[j],minx[i],maxx[i],tri_len,tri_len,tri_len*i+(j+1),i,j)
l=l+1
l=0
j=j+1
i=i+1
j=0
我希望能理解为什么我没有得到维度为 (1,8,8) 的多维数组 F_matrix
的 64 个元素。
如果你仔细观察,你会发现F_matrix[0]
由8个子数组(一维数组)组成。因此你得到 len(F_matrix[0])
作为 8。此外,这 8 个子数组中的每一个都包含 8 个元素,所以你总共有 8x8 = 64 个元素。
现在如果你这样做
len(F_matrix[0][0])
您会看到它的结果也是 8。由于您有 8 个子数组,因此 F_matrix[0]
的索引 运行 从 0 到 7。具体来说,每个
其长度为 8 作为
print (len(F_matrix[0][0])) # 8
print (len(F_matrix[0][1])) # 8
print (len(F_matrix[0][2])) # 8
.
.
.
print (len(F_matrix[0][7])) # 8
编辑
要获得一般多维数组中的元素总数,您首先需要将所有维度展平为一维,然后计算长度。因此,对于您的示例,要获得长度 (64),您可以执行
print (len(F_matrix.flatten()))
len(F_matrix[0])
表示第一个维度的长度(大小)。由于您有一个 3d 数组 (1,8,8)
,F_matrix[0]
的长度表示包含多少个其他元素(可以是数组或列表等)。这些元素本身可以是多维的。