Python np.asarray不会返回真实的形状

问题描述 投票:1回答:1

我在原始表的两个子表上旋转一个循环。

当我开始循环,并检查形状时,我得到(1008,),而形状必须是(1008,168,252,3)。我的循环中有问题吗?

train_images2 = []
for i in range(len(train_2)):
  im = process_image(Image.open(train_2['Path'][i]))
  train_images2.append(im)
train_images2 = np.asarray(train_images2)
python loops numpy multidimensional-array numpy-ndarray
1个回答
0
投票

问题是你的process_image()函数返回标量而不是处理过的图像(即形状为(168,252,3)的3D数组)。所以,变量im只是一个标量。因此,您将数组train_images2变为1D数组。下面是一个人为的例子,说明了这一点:

In [59]: train_2 = range(1008)
In [65]: train_images2 = []

In [66]: for i in range(len(train_2)):
    ...:     im = np.random.random_sample()
    ...:     train_images2.append(im)
    ...: train_images2 = np.asarray(train_images2)
    ...: 

In [67]: train_images2.shape
Out[67]: (1008,)

所以,修复是你应该确保process_image()函数返回一个3D数组,如下面的设计示例所示:

In [58]: train_images2 = []
In [59]: train_2 = range(1008)

In [60]: for i in range(len(train_2)):
    ...:     im = np.random.random_sample((168,252,3))
    ...:     train_images2.append(im)
    ...: train_images2 = np.asarray(train_images2)
    ...: 

# indeed a 4D array as you expected
In [61]: train_images2.shape
Out[61]: (1008, 168, 252, 3)
© www.soinside.com 2019 - 2024. All rights reserved.