【问题标题】:Access of first sub-array from a multi-dimensional array从多维数组访问第一个子数组
【发布时间】:2019-06-13 15:36:09
【问题描述】:

我混淆了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]) = 8F_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 个元素。

【问题讨论】:

    标签: python multidimensional-array reshape sub-array


    【解决方案1】:

    如果你仔细观察,你会发现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] 的长度意味着包含多少其他元素(可以是数组或列表等)。这些元素本身可以是多维的。

    【讨论】:

    • len(F_matrix[0]) 代表什么?一维数组F_matrix[0][i]i=0:7 的数量?我不明白它的表示,谢谢
    • 如何获取F_matrix的元素总数,即获取64个元素的函数是什么?
    • @youpilat13:要获得 64(所有元素),您可以这样做 print (len(F_matrix.flatten()))
    • 所以F_matrix[0]代表第二个索引的维度,即8。它会给出第二个索引的维度,不是吗?
    • F_matrix[0] 表示第一个维度的维度(大小),在您的情况下为 1。把它想象成一扇门 ([0]),当你打开它时有 8 扇门。然后这 8 扇门中的每扇门都有另外 8 扇门
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 2012-05-29
    • 1970-01-01
    相关资源
    最近更新 更多