Python2.7(numpy)在将三维numpy数组附加到空数组时保持数组的形状
我正在尝试创建一个空的numpy数组,并保存从设备中获取的所有图像。这些图像以numpy数组的形式出现(240320,3)。创建一个空数组来存储这些图像似乎是正确的做法。然而,当我尝试追加时,我得到以下错误:Python2.7(numpy)在将三维numpy数组附加到空数组时保持数组的形状,python,arrays,numpy,Python,Arrays,Numpy,我正在尝试创建一个空的numpy数组,并保存从设备中获取的所有图像。这些图像以numpy数组的形式出现(240320,3)。创建一个空数组来存储这些图像似乎是正确的做法。然而,当我尝试追加时,我得到以下错误: ValueError: all the input arrays must have same number of dimensions 代码如下: import numpy as np # will be appending many images of size (
ValueError: all the input arrays must have same number of dimensions
代码如下:
import numpy as np
# will be appending many images of size (240,320,3)
images = np.empty((0,240,320,3),dtype='uint8')
# filler image to append
image = np.ones((240,320,3),dtype='uint8') * 255
images = np.append(images,image,axis=0)
我需要将许多图像附加到此数组,因此在
100
附加之后,如果操作正确,图像数组的形状应为(100240320,3)
。您的图像
数组有四个维度,因此必须为其添加一个四维项。为此,只需将一个新轴添加到图像
,如下所示:
images = np.append(images,image[np.newaxis, ...], axis=0)
从某种意义上说,当通过一个轴时,
numpy.append
更类似于list.extend
而不是list.append
优于np.append
是:
images = np.empty((100,240,320,3),dtype='uint8')
for i in range(100):
image = ....
images[i,...] = image
或
np.append
只是np.concatenate
的封面。因此,每次通过循环时,它都会生成一个新数组。添加第100个图像时,您已经复制了第一个图像100次!。np.append
的另一个缺点是必须调整图像的尺寸,这是一个常见的错误源。另一个常见的错误是将初始的“空”数组形状弄错。当然,将这些数组粘贴到列表中,然后在最后构建组合数组会更有意义,因为重复附加到数组中效率很低。这更像是alist=alist+[image]
alist = []
for i in range(100):
image = ....
alist.append(image)
images = np.array(alist)
# or images = np.stack(alist, axis=0) for more control