Python 图像[:,:,0:2]/255和形状更改

Python 图像[:,:,0:2]/255和形状更改,python,python-3.x,numpy,scipy,Python,Python 3.x,Numpy,Scipy,我曾经看到以下代码行 image = image[:, :, 0:2]/255 在运行这行代码之前,图像的形状为[4891489,3]。但运行这行代码后,图像的形状为[4891489,2]。我认为除法操作,即,image[:,:,0:2]/255不应该改变形状。但它确实改变了,这让我很困惑 改变形状的是切片,而不是分割: In [11]: a = np.random.rand(9, 9, 9) In [12]: a[0:2, :, :].shape Out[12]: (2, 9, 9)

我曾经看到以下代码行

 image = image[:, :, 0:2]/255

在运行这行代码之前,图像的形状为
[4891489,3]
。但运行这行代码后,图像的形状为
[4891489,2]
。我认为除法操作,即,
image[:,:,0:2]/255
不应该改变形状。但它确实改变了,这让我很困惑

改变形状的是切片,而不是分割:

In [11]: a = np.random.rand(9, 9, 9)

In [12]: a[0:2, :, :].shape
Out[12]: (2, 9, 9)

In [13]: a[:, 0:2, :].shape
Out[13]: (9, 2, 9)

In [14]: a[:, :, 0:2].shape
Out[14]: (9, 9, 2)

In [15]: (a[:, :, 0:2] / 255).shape
Out[15]: (9, 9, 2)

请参见。

改变形状的是切片,而不是分割:

In [11]: a = np.random.rand(9, 9, 9)

In [12]: a[0:2, :, :].shape
Out[12]: (2, 9, 9)

In [13]: a[:, 0:2, :].shape
Out[13]: (9, 2, 9)

In [14]: a[:, :, 0:2].shape
Out[14]: (9, 9, 2)

In [15]: (a[:, :, 0:2] / 255).shape
Out[15]: (9, 9, 2)

请参阅。

好的,它们除以255,因为

像素值通常是介于0和255之间的无符号整数。虽然这些像素值可以直接以原始格式呈现给神经网络模型,但这可能会在建模过程中带来挑战,例如模型的训练速度比预期的慢

相反,在建模之前准备图像像素值会有很大的好处,例如简单地将像素值缩放到0-1到居中的范围,甚至将值标准化


我想现在你会知道了,他们除以255,因为

像素值通常是介于0和255之间的无符号整数。虽然这些像素值可以直接以原始格式呈现给神经网络模型,但这可能会在建模过程中带来挑战,例如模型的训练速度比预期的慢

相反,在建模之前准备图像像素值会有很大的好处,例如简单地将像素值缩放到0-1到居中的范围,甚至将值标准化


我想现在你会知道了,因为你正在重新分配?如果你删除分割操作,形状仍然会改变,所以很明显你的问题不是分割。你的意思是
0:3
?这是切片101<代码>[…,0:2]选取两个片段
[0,2)
,2不包括在内,因此,只选取前两个频道。仔细看看numpy(python)切片机制,否则您将来将面临更多类似的问题。因为您正在重新分配?如果删除分割操作,形状仍会改变,因此显然您的问题不是分割。您的意思是
0:3
?这是切片101。
[…,0:2]
选择两个切片
[0,2)
,2不包括在内,因此只选择前两个通道。请仔细查看numpy(python)的切片机制,否则将来您将面临更多类似的问题。