代码之家  ›  专栏  ›  技术社区  ›  youpilat13 Ty Petrice

从多维数组访问第一个子数组

  •  0
  • youpilat13 Ty Petrice  · 技术社区  · 6 年前

    我在 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]]
    

    所以,对于 FX矩阵〔0〕 ,我得到一个8x8=64个元素

    但是为什么我得到 len(F_matrix[0]) = 8 ? FX矩阵〔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
    

    我想知道为什么多维数组没有64个元素 F_matrix 尺寸(1、8、8)。

    当做

    1 回复  |  直到 6 年前
        1
  •  0
  •   Sheldore    6 年前

    如果你仔细观察,你会发现 F_matrix[0] 由8个子数组(一维数组)组成。因此你得到 len(F_matrix[0]) 为8。此外,这8个子数组中的每一个子数组都包含8个元素,因此总共有8x8=64个元素。

    现在如果你这样做

    len(F_matrix[0][0])
    

    你会看到它也会产生8。既然你有8个子阵, FX矩阵〔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_矩阵[0]) 表示第一个维度的长度(大小)。因为你有一个三维阵列 (1,8,8) 的长度 FX矩阵〔0〕 表示还包含多少个元素(可以是数组或列表等)。这些元素本身可以是多维的。