我如何获得此列表的等效形式?

时间:2018-02-10 22:24:45

标签: python list numpy python-imaging-library pillow

我在Python中有以下列表:

M = np.array([image_array_to_vector1,image_array_to_vector2,image_array_to_vector3,image_array_to_vector4])

其中每个项目表示使用ravel()函数转换为矢量的图像。

在这种情况下,

M如下所示:

[[165 176 186 ...,   0   1   1]
 [ 46  44  46 ...,  57  49  44]
 [ 97 113 109 ...,  46  49  69]
 [139 111 101 ..., 244 236 236]]

而不是如上所示手动执行此操作,而是执行以下操作:

for root, dirs, files in os.walk(path):
    for file in files:
        image = Image.open(root + '/' + file)
        image_array = np.array(image)
        image_array_to_vector = image_array.ravel()
        X.append(image_array_to_vector)

当我print X时,我得到以下内容:

[array([165, 176, 186, ...,   0,   1,   1], dtype=uint8), array([46, 44, 46, ..., 57, 49, 44], dtype=uint8), array([ 97, 113, 109, ...,  46,  49,  69], dtype=uint8), array([139, 111, 101, ..., 244, 236, 236], dtype=uint8)]

第二种形式是否与第一种形式相同?由于第二种形式在输出中包含arraydtype

感谢。

1 个答案:

答案 0 :(得分:1)

M是NumPy数组,X是NumPy数组的列表。它们是不同的。 一个区别是X会有列表的方法(例如appendremoveextend),而M具有NumPy的方法数组(例如reshapesizesearchsorted)。

虽然某些NumPy函数可能在X上运行,就好像它是M一样(因为在引擎盖下,函数在其参数上调用np.arraynp.asarray),可能不应该指望这一点。如果您希望X成为NumPy数组,请将其明确定义为。

假设X中的所有数组具有相同的形状,您可以使用XM放入一个NumPy数组(应该与X = np.array(X)相同)。

import os
X  = []
for root, dirs, files in os.walk(path):
    for file in files:
        image = Image.open(os.path.join(root, file))
        image_array = np.array(image)
        image_array_to_vector = image_array.ravel()
        X.append(image_array_to_vector)
X = np.array(X)