将输出的1维numpy阵列重新整形为2/3维阵列

时间:2017-01-17 08:32:22

标签: arrays numpy python-2.x

所以我正在使用图像的像素数据,对它应用了一些计算,这给了我一个结果数组,其形状是未知的,直到完成计算。 我无法将输出的数组重新整形为二维或三维数组

这是一个例子

from PIL import Image

img = Image.open('C:\Users\Amit\Desktop\sample_pic.jpeg').convert("RGB")
pixels =np.array(img)
print(pixels.shape) # (477L, 887L, 3L)      PIL seems to switch height and width because original dimensions are 877 x 477
flat = pixels.flatten() 
print (flat.shape)  # (1269297L,)
filter1= np.array([1,1,0])
pixels2 = np.array([])

for i in range(0, len(flat),2):
     pixels2 =np.append(pixels2,np.sum((flat[i:i+3] * filter1)))

最后的循环只是对扁平化数组进行一些计算,并输出一个新的数组,其形状我不知道直到输出

print pixels2.shape 

#(634649L,)

所以我试图将输出的数组重新塑造成适合图片的尺寸。 我尝试了代码

pixels2.reshape(800,-1)

但是我收到了错误

    pixels2.reshape(800,-1)
    ValueError: total size of new array must be unchanged

相同
    pixels.reshape(800,-1,3)
    ValueError: total size of new array must be unchanged

我希望添加(-1)会自动找到合适的第二维,但似乎并非如此。我没有将数字800作为其中一个尺寸,但我正在寻找前三个尺寸超过300(300 +,300 +,3)

感谢。

更新

pixels2数组添加一个元素,使其成为一个可被3整除的(634650L)数组(我通过反复试验找到它) 但是,找到其他两个维度也会涉及大量的反复试验。 (800,-1,3)不起作用。

0 个答案:

没有答案