我正在尝试从包含字典列表的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数组并添加所有图像?
答案 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数组。
然而,这是以两次迭代数据为代价的。
(注意:两个单独的答案,因此我们可以单独评级,因为我不确定哪种解决方案更好。)