在python中创建许多ndarray(不同大小)的列表

时间:2017-09-29 03:26:55

标签: arrays python-2.7 numpy multidimensional-array

我是python的新手。我们是否有像Multidimensional structure arrays中的Matlab Python 2.7那样处理列表中的许多ndarray的类似结构。例如,我有15个这样的图层(即layer_X, X=[1,15])和different size but all are 4D

>>>type(layer_1)
<type 'numpy.ndarray'>
>>> np.shape(layer_1)
(1, 1, 32, 64)
>>> np.shape(layer_12)
(1, 1, 512, 1024)

如何使用位置X指定处理这些ndarray的结构?

2 个答案:

答案 0 :(得分:2)

您可以使用字典:

layer_dict = {}
for X in range(1,16):
    layer_dict['layer_' + str(X)] = np.ndarray(shape=(1, 1, 32, 64))

这允许存储各种大小的数组(以及任何其他精确的数据类型),添加和删除组件。它还允许您有效地访问阵列。

添加图层类型:

layer_dict['layer_16'] = np.ndarray(shape=(1, 1, 512, 1024))

删除一个:

del layer_dict['layer_3']

请注意,这些项目不是按顺序存储的,但这并不会阻止您使用类似于初始构造循环中的方法进行有效的有序处理。如果您想要一个有序字典,可以使用collections模块中的OrderedDict

如果有任何特定的规则来选择每个图层的大小,请更新您的问题,我将编辑我的答案。

这是顺序使用的一个例子:

for X in range(1,16):
    temp = layer_dict['layer_' + str(X)]
    print type(temp)

temp的类型是ndarray,您可以将其用作任何其他ndarray

更详细的用法示例:

for X in range(1,16):
    temp = layer_dict['layer_' + str(X)]
    temp[0, 0, 2, 0] = 1
    layer_dict['layer_' + str(X)] = temp

此处每个图层都会被提取到temp,经过修改,然后重新分配给layer_dict

答案 1 :(得分:1)

您可以使用list

layers = [layer_1, layer_12]