【发布时间】:2020-01-30 21:15:16
【问题描述】:
我需要一个 3d 嵌套数组。如何将其展平为一维数组? (因为性能)我假设我需要乘一些东西等等,但我不是最伟大的数学家。 谢谢!
def imgRGB(im):
width, height = im.size
#create matrix
matrix = []
for i in range(height):
matrix.append([[0,0,0] for _ in range(width)])
#get the rgb values
for x in range(width):
for y in range(height):
r,g,b = im.getpixel((x,y))
matrix[y][x][0] = r
matrix[y][x][1] = g
matrix[y][x][2] = b
return matrix
像素值将与其他 RGB 值进行比较以找到最接近的匹配项。
def getNearestColor(rgb):
a = []
for i in range(len(rgbValues)):
d = ((rgbValues[i][0]-rgb[0])*0.3)**2 + ((rgbValues[i][1]-rgb[1])*0.59)**2 + ((rgbValues[i][2]-rgb[2])*0.11)**2
a.append(d)
list.sort(a)
return a[0]
【问题讨论】:
-
不要认为我们这里有最伟大的读心者。你能发布一个 mcve - stackoverflow.com/help/minimal-reproducible-example吗?
-
您已标记 NumPy,但您的代码实际上并未使用 NumPy。您已经创建了一个嵌套列表。 NumPy 数组效率更高。我不知道您使用的是什么图像库,但它可能有一种方便的内置方法来获取 NumPy 数组。此外,如果您确实需要展平您的数据结构(听起来您可能不需要),NumPy 数组有一个
flatten方法(或ravel,如果视图没问题)。 -
什么时候必须展平数据结构? (性能相关)
-
我正在使用 PIL(低)
-
您可以从 Pillow 图像中获取 NumPy 数组,使用
numpy.asarray(im)获取图像的只读视图,或使用numpy.array(im)获取图像数据副本支持的可修改数组。至于扁平化以提高性能,一般没有理由期望扁平化数据结构能够带来有意义的性能改进。它可能会有所帮助,它可能实际上什么也没做,甚至可能会造成伤害,这取决于您正在做什么以及低级实现细节的工作方式。在这里,我想说的是,在担心扁平化是否有帮助之前,您应该专注于利用 NumPy。
标签: python arrays python-3.x numpy multidimensional-array