Python 如何将三维阵列展平为一维阵列

Python 如何将三维阵列展平为一维阵列,python,arrays,python-3.x,numpy,multidimensional-array,Python,Arrays,Python 3.x,Numpy,Multidimensional Array,我需要一个三维嵌套阵列。如何将其展平为1d阵列?(因为性能)我假设,我需要乘以一些东西等等,但我不是最伟大的数学家。 谢谢 def imgRGB(im): 宽度、高度=im尺寸 #创建矩阵 矩阵=[] 对于范围内的i(高度): 矩阵。追加([[0,0,0]表示范围内(宽度)]) #获取rgb值 对于范围内的x(宽度): 对于范围内的y(高度): r、 g,b=im.getpixel((x,y)) 矩阵[y][x][0]=r 矩阵[y][x][1]=g 矩阵[y][x][2]=b 返回矩阵 像素

我需要一个三维嵌套阵列。如何将其展平为1d阵列?(因为性能)我假设,我需要乘以一些东西等等,但我不是最伟大的数学家。 谢谢

def imgRGB(im):
宽度、高度=im尺寸
#创建矩阵
矩阵=[]
对于范围内的i(高度):
矩阵。追加([[0,0,0]表示范围内(宽度)])
#获取rgb值
对于范围内的x(宽度):
对于范围内的y(高度):
r、 g,b=im.getpixel((x,y))
矩阵[y][x][0]=r
矩阵[y][x][1]=g
矩阵[y][x][2]=b
返回矩阵
像素值将与其他RGB值进行比较,以找到最接近的匹配

def getNearestColor(rgb):
a=[]
对于范围内的i(len(rgbValue)):
d=((rgb值[i][0]-rgb[0])*0.3)**2+((rgb值[i][1]-rgb[1])*0.59)**2+((rgb值[i][2]-rgb[2])*0.11)**2
a、 附加(d)
列表.排序(a)
返回[0]

您可以使用ndarray.flatte,在您的示例中,它将是
matrix.flatte()
。这将返回矩阵的展平版本。文档也有一个示例。

如果我理解正确,您需要执行以下操作:

rgbValues = np.array(im).reshape(-1,3)
a = np.sort(np.sum(((rgbValues - rgb)* [0.3, 0.59, 0.11])**2, axis=1))

其中,
rgb
是一些值r,g,b的列表

也不要认为我们这里有最好的读心术。你可以发布一个mcve-?你已经标记了NumPy,但是你的代码实际上没有使用NumPy。您已经创建了一个嵌套列表。NumPy阵列的效率要高得多。我不知道您使用的是什么图像库,但它可能有一种方便的内置方式来获取NumPy阵列。另外,如果您确实需要展平数据结构(听起来您可能不需要),NumPy阵列有一个
flatten
方法(或者
ravel
,如果视图没有问题)。我什么时候必须展平数据结构?(与性能相关)我正在使用PIL(低)您可以使用
NumPy.asarray(im)
从枕头图像中获取NumPy数组,用于图像的只读视图,或者使用
NumPy.array(im)
从图像数据副本支持的可修改数组中获取NumPy数组。至于性能扁平化,没有一般理由期望扁平化数据结构能够带来有意义的性能改进。它可能会有所帮助,也可能毫无用处,甚至可能会造成伤害,这取决于您正在做什么以及底层实现细节的效果。在这里,我想说的是,在担心扁平化是否会有所帮助之前,你应该关注于利用NumPy。