我正在处理一个图像处理问题,我的代码看起来像这样(下面的代码只是说明了我想解决的问题类型):
for i in range(0,10):
for j in range(0,10):
number_length = round(random.random()*10)
a = np.zeros(number_length)
Z[i][j] = a
我想要做的是创建某种2D列表或np.array(不太确定),其中我基本上为图像中的每个像素索引一个术语,并为每个像素的每个像素设置一个矢量/值列表此外,我无法预测其长度,每个索引像素的每个矢量的长度彼此不同。最好的方法是什么?
在我的MATLAB代码中,解决方法很简单:我定义一个2D单元格,只需将任何向量分配给2D单元格中的任何元素。由于细胞不会抱怨每个索引向量的相干长度,这是一件好事。在python中处理这个问题的等效最优解决方案是什么?
理想情况下,解决方案应该不涉及预测任何像素的“a”的最大长度,并使所有索引向量的长度相同(因为这意味着我必须做一些零填充,如果索引向量是高维的,并且这些高维向量在图像中稀疏,则会消耗内存。
答案 0 :(得分:2)
NumPy数组不起作用,因为它需要固定的尺寸。您可以使用2d列表(即列表列表),其中每个元素可以是任意长度的数组。这类似于您在Matlab中的设置,使用2d单元格向量数组。
试试这个:
z = [[np.zeros(np.random.randint(10)+1) for j in range(10)] for i in range(10)]
这将创建一个10x10列表,其中z [i] [j]是一个随机长度为零的NumPy数组(从1到10)。
编辑(评论中请求的嵌套循环):
z = [[None for j in range(10)] for i in range(10)]
for i in range(len(z)):
for j in range(len(z[i])):
z[i][j] = np.zeros(np.random.randint(10)+1)