在for循环中构造一个numpy数组

时间:2018-05-02 17:03:53

标签: python numpy

我正在尝试从包含字典列表的python代码加载数据库。对于列表中的每个项目,字典包含文件的名称,子列表包含n个不同的字典,其中文件名和数据是大小为40x40x3的numpy矩阵并且对应于图像。我希望在for循环中存储所有那些大小为Nx40x40x3的numpy文件中的图像。

for item in dataset: 
    print item["name"] # the name of the list
    print item["data"] # a list of dictionaries
    for row in item["data"]:
      print row["sub_name"] # the name of the image
      print row["sub_data"] # contains an numpy array (my image) 

我如何构建一个numpy数组并添加所有图像?

2 个答案:

答案 0 :(得分:2)

NumPy数组have fixed sizes,所以除非你知道前面的大小,否则你必须使用可以改变大小的东西,比如python列表。

conversationId

答案 1 :(得分:2)

为了做到这一点,您需要使用一个数据类型,其大小可以像我在other answer中那样进行变异,或者您也可以计算出之前的数量定义数组。 (正如@ P.Camilleri所建议的那样)

以下是一个例子:

# Count nuber of images
idx_count = 0
for item in dataset:
    idx_count += len(item['data'])

# Create an empty numpy array that's Nx3x3
images = np.empty((count, 3, 3))

# Populate numpy array with images
idx = 0
for item in dataset:
    for row in item["data"]:
        images[idx] = row["sub_data"]
        idx += 1

print(images)

这样做的好处是你只需要分配一次空间,就像使用python列表一样,它首先被添加到列表然后被复制到一个numpy数组。

然而,这是以两次迭代数据为代价的。

(注意:两个单独的答案,因此我们可以单独评级,因为我不确定哪种解决方案更好。)