Python np.asarray 不return 真面目
Python np.asarray does not return the true shape
我在原来 table 的两个子 table 上旋转了一个循环。
当我开始循环并检查形状时,我得到 (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)
问题是您的 process_image()
函数返回标量而不是处理后的图像(即形状 (168,252,3)
的 3D 数组)。所以,变量 im
只是一个标量。因此,您将数组 train_images2
设为一维数组。下面是一个人为的例子来说明这一点:
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()
函数 returns 一个 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)
我在原来 table 的两个子 table 上旋转了一个循环。
当我开始循环并检查形状时,我得到 (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)
问题是您的 process_image()
函数返回标量而不是处理后的图像(即形状 (168,252,3)
的 3D 数组)。所以,变量 im
只是一个标量。因此,您将数组 train_images2
设为一维数组。下面是一个人为的例子来说明这一点:
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()
函数 returns 一个 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)