【问题标题】:How to define dictionary structure in ndarray如何在ndarray中定义字典结构
【发布时间】:2014-12-01 11:54:05
【问题描述】:

我想创建一个 3 维数组,数组中的每个值都代表一个字典。

例如:myArray[m][n][k] 类型为 {'position':(0,0), 'boundary': [(8,8)(512,512)]}

我知道,可以通过在numpy.ndarray中指定dtype参数来定义

numpy.ndarray(shape=(m, n, k), dtype=...)

dtype 应该是什么来指定上面的确切字典语法

【问题讨论】:

    标签: python python-2.7 numpy multidimensional-array


    【解决方案1】:

    AFAIK 没有。您可以做的最好的事情是定义dtype = object(例如,如果您尝试设置dtype=dict,您会得到) - 然后手动填充它。没有什么能确保字典的结构(你称之为“语法”)——你可以为此使用一个类。

    然而,请注意 numpy 针对标量变量进行了优化,您的用法很奇怪。

    【讨论】:

      【解决方案2】:

      如果你只需要命名列并且列集是不可变的,你可以使用记录数组:

      In [30]: arr = np.zeros((3,3), dtype=[('position', 'f8', 2),
                                            ('boundary', 'i8', (2,2))]); arr
      Out[30]: 
      array([[([0.0, 0.0], [[0, 0], [0, 0]]), ([0.0, 0.0], [[0, 0], [0, 0]]),
              ([0.0, 0.0], [[0, 0], [0, 0]])],
             [([0.0, 0.0], [[0, 0], [0, 0]]), ([0.0, 0.0], [[0, 0], [0, 0]]),
              ([0.0, 0.0], [[0, 0], [0, 0]])],
             [([0.0, 0.0], [[0, 0], [0, 0]]), ([0.0, 0.0], [[0, 0], [0, 0]]),
              ([0.0, 0.0], [[0, 0], [0, 0]])]], 
            dtype=[('position', '<f8', (2,)), ('boundary', '<i8', (2, 2))])
      
      In [31]: arr['boundary'][0] = [[1,2], [3,4]]
      
      In [32]: arr
      Out[32]: 
      array([[([0.0, 0.0], [[1, 2], [3, 4]]), ([0.0, 0.0], [[1, 2], [3, 4]]),
              ([0.0, 0.0], [[1, 2], [3, 4]])],
             [([0.0, 0.0], [[0, 0], [0, 0]]), ([0.0, 0.0], [[0, 0], [0, 0]]),
              ([0.0, 0.0], [[0, 0], [0, 0]])],
             [([0.0, 0.0], [[0, 0], [0, 0]]), ([0.0, 0.0], [[0, 0], [0, 0]]),
              ([0.0, 0.0], [[0, 0], [0, 0]])]], 
            dtype=[('position', '<f8', (2,)), ('boundary', '<i8', (2, 2))])
      

      【讨论】:

      • 这个答案真的很有帮助。有没有办法,我可以添加一个没有固定大小的命名列(比如('visited', 'i8', 2))(最初是空数组),以后可以附加它。示例[[1,0],[2,0],[1,2],...]
      • 你可以使用append_fields,见here
      猜你喜欢
      • 1970-01-01
      • 2011-09-10
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      • 2020-10-18
      相关资源
      最近更新 更多