如何在python中创建通用的2d数组

时间:2016-07-27 10:52:26

标签: python numpy generics

在Java中你可以这样做:Node[][] nodes;其中Node.java是一个自定义类。我如何在python中进行Node.py:

class Node(object):
    def __init__(self):
    self.memory = []
    self.temporal_groups = []

我已导入numpy并创建了对象类型

typeObject = numpy.dtype('O') # O stands for python objects
nodes = ???

2 个答案:

答案 0 :(得分:1)

您可以这样尝试,在您的节点类中创建一个将返回通用数组的函数:

def genArray(a, b):
    return [[0 for y in range(a)] for x in range(b)]

然后你可以按照你想要的方式分配它们。也许您可以将0更改为节点对象。如果有帮助,请告诉我

答案 1 :(得分:0)

您有两个简单的选择:使用numpy或声明嵌套列表。后一种方法在概念上更类似于Node[][],因为它允许不规则的列表,Java也是如此,但前一种方法可能会使处理更快。

numpy数组

numpy中制作数组:

import numpy as np
x = np.full((m, n), None, dtype=np.object)

numpy中,您必须预先了解数组的大小(此处为mn)。有一些方法来增长数组,但它们效率不高,特别是对于大型数组。 np.full将使用您想要的任何引用的副本初始化您的数组。您可以在此之后修改元素。

Python列表

要创建一个参差不齐的列表,您不必做太多事情:

x = []

这会创建一个空列表。这相当于Java中的Node[][],因为它也声明了一个列表。主要区别在于Python列表可以更改大小并且是无类型的。它们实际上总是Object[]

要向列表中添加更多维度,只需执行x[i] = [],这会将嵌套列表插入到外部列表中。这类似于定义类似

的内容
Node[][] nodes = new Node[m][];
nodes[i] = new Node[n];

其中m是嵌套列表(行)的数量,n是每个列表(列)中元素的数量。同样,主要区别在于,一旦在Python中有了一个列表,就可以像Java一样扩展或收缩它。

像在Java中一样使用x[i][j]进行操作。您可以通过x.append([])x[i] = []添加新的子列表,其中ix末尾的索引。