【问题标题】:generate lists from 3 dimensional array从 3 维数组生成列表
【发布时间】:2014-08-03 10:58:08
【问题描述】:

我一直在为数组问题苦苦挣扎。例如,如果我有以下 3 维数组:

import os
import numpy as np

myArray = [[[1,2,3],
            [0,0,0],
            [2,2,2]],
           [[0,1,2],
            [1,1,1],
            [3,3,3]],
           [[2,3,4],
            [5,6,7],
            [8,9,10]]]

我想以递归方式为 myArray[0] 中的每个位置定义一个列表,该列表将存储 Z 轴上的值,以便:

list1 = [myArray[0][0][0],myArray[1][0][0], myArray[2][0][0]]  # would be [1,0,2]
list2 = [myArray[0][0][1],myArray[1][0][1], myArray[2][0][1]]  # would be [2,1,3]
list3 = [myArray[0][0][2],myArray[1][0][2], myArray[2][0][2]]  # would be [3,2,4]
list4 = [myArray[0][1][0],myArray[1][1][0], myArray[2][1][0]]  # would be [0,1,5]
list5 = [myArray[0][1][1],myArray[1][1][1], myArray[2][1][1]]  # would be [0,1,6]
list6 = [myArray[0][1][2],myArray[1][1][2], myArray[2][1][2]]  # would be [0,1,7]
list7 = [myArray[0][2][0],myArray[1][2][0], myArray[2][2][0]]  # would be [2,3,8]
list8 = [myArray[0][2][1],myArray[1][2][1], myArray[2][2][1]]  # would be [2,3,9]
list9 = [myArray[0][2][2],myArray[1][2][2], myArray[2][2][2]]  # would be [2,3,10]

我猜它必须类似于

for i in range(len(myArray[0])-1):
    list+str(i) =[something]

你知道如何生成这个吗?

非常感谢

【问题讨论】:

    标签: python arrays list recursion


    【解决方案1】:

    既然你已经在使用 numpy:

    np.swapaxes(np.swapaxes(myArray,0,2),0,1)
    

    输出:

    array([[[ 1,  0,  2],
            [ 2,  1,  3],
            [ 3,  2,  4]],
    
           [[ 0,  1,  5],
            [ 0,  1,  6],
            [ 0,  1,  7]],
    
           [[ 2,  3,  8],
            [ 2,  3,  9],
            [ 2,  3, 10]]])
    

    【讨论】:

      【解决方案2】:

      我认为最清晰的方法是使用 numpy 的数组切片和列表推导:

      import numpy as np
      from itertools import product
      
      # use a numpy array
      myArray = np.array([[[1,2,3],
                           [0,0,0],
                           [2,2,2]],
                         [[0,1,2],
                          [1,1,1],
                          [3,3,3]],
                         [[2,3,4],
                          [5,6,7],
                          [8,9,10]]])
      
      # get the dimensions of the array
      _, x, y = arr.shape
      
      # slice along the appropriate axis
      list1,list2,list3,list4,list5,list6,list7,list8,list9 = 
        [myArray[:,i,j] for i,j in product(xrange(x),xrange(y))]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-31
        • 1970-01-01
        • 2020-06-29
        • 1970-01-01
        相关资源
        最近更新 更多