关于重塑多维数组

时间:2017-02-08 15:18:09

标签: python numpy scipy

我有一个形状为(15000,1,96,96),的多维数组,其中每个96 * 96矩阵代表一个图像。我想将其形状转换为(15000,96,96,1).

我可以使用a=a.reshape(15000,96,96,1)来做吗?这是正确的方法吗?

2 个答案:

答案 0 :(得分:1)

对于您的具体示例,您需要将第二维转置为最后一维。您可以使用transpose method

在numpy数组中对维度进行随机播放

例如:

a = np.zeros((10,1,96,96))
print(a.shape)
>>> (10, 1, 96, 96)

a = a.transpose(0,2,3,1)
print(a.shape)
>>> (10, 96, 96, 1)

答案 1 :(得分:1)

要完成@OddNorg的评论,这是一个例子:

假设您有3张尺寸(2 * 2)的图像:

>>>img0 = [[0,0],[0,0]]
>>>img1 = [[1,1],[1,1]]
>>>img2 = [[2,2],[2,2]]
>>>imgs = np.concatenate([[img0],[img1],[img2]])
array([[[0, 0],
        [0, 0]],  

       [[1, 1],
        [1, 1]], 

       [[2, 2],
        [2, 2]]])
>>>imgs.shape
(3,2,2)

现在我们希望第一维和第二维上的像素而不是第二维和第三维。

如果我们使用重塑它确实按预期工作:

>>>imgs_r = imgs.reshape((2,2,3))
>>>imgs_r[:,:,0]
array([[0, 0],
       [1, 2]])

修改第一张图片

通过转置它工作正常,图像不会被修改:

>>>imgs_t = imgs.tranpose((1,2,0))
>>>imgs_t[:,:,0]
array([[0, 0],
       [0, 0]])