Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python2.7(numpy)在将三维numpy数组附加到空数组时保持数组的形状_Python_Arrays_Numpy - Fatal编程技术网

Python2.7(numpy)在将三维numpy数组附加到空数组时保持数组的形状

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 (

我正在尝试创建一个空的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 (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