日新月异 PyTorch - numpy 基础: numpy 数组的形状变化(升维,降维,轴变换)

源码 https://github.com/webabcd/PytorchDemo
作者 webabcd

日新月异 PyTorch - numpy 基础: numpy 数组的形状变化(升维,降维,轴变换)

示例如下:

numpy\demo4.py

import numpy as np


# 改变数组的形状(升维,降维)
def sample1():
    a = np.arange(8)
    print(a) # [0 1 2 3 4 5 6 7]

    # reshape() 修改数组的形状(要保证数组的形状的大小不变),按行排序
    # 数组 a 的形状的大小是 8,数组 b 的形状的大小是 2 * 4 = 8
    b = a.reshape(4,2, order='C')
    print(b)
    '''
[[0 1]
 [2 3]
 [4 5]
 [6 7]]
    '''
    # reshape() 修改数组的形状(要保证数组的形状的大小不变),按列排序
    # -1 代表自动决定这个轴的大小,因为数组 a 的形状的大小是 8,所以数组 b 的形状的大小也是 8(其第 1 轴的大小为 2,所以其第 0 轴的大小会自动指定为 4)
    b = a.reshape(-1,2, order='F')
    print(b)
    '''
[[0 4]
 [1 5]
 [2 6]
 [3 7]]
    '''

    # np.resize() 修改数组的形状
    # 与 reshape() 不同的是,resize() 可以改变形状的大小,空白部分会用原数据按顺序填充
    c = np.resize(a, (4,3))
    print(c)
    '''
[[0 1 2]
 [3 4 5]
 [6 7 0]
 [1 2 3]]
    '''

    # flat 可以将多维数组转换为元素的迭代器,其可以迭代出每一个元素
    d = [v for v in b.flat]
    print(d) # [0, 4, 1, 5, 2, 6, 3, 7]

    # flatten() 将多维数组降级为一维数组,按行排序
    e = b.flatten(order='C')
    print(e) # [0 4 1 5 2 6 3 7]

    # flatten() 将多维数组降级为一维数组,按列排序
    f = b.flatten(order='F')
    print(f) # [0 1 2 3 4 5 6 7]

    g = np.array([[1, 2], [3, 4]])
    print(g)
    '''
[[1 2]
 [3 4]]
    '''
    # np.ravel() 将多维数组降级为一维数组,新数组中的元素通过指针引用原数组中的元素
    h = np.ravel(g)
    print(h)
    '''
[1 2 3 4]
    '''
    # 因为 np.ravel() 做的是数据指针的复制,而不是数据的复制,所以新数组中的元素的变化会影响原数组,原数组中的元素的变化也会影响新数组
    h[0] = 100
    print(h)
    '''
[100   2   3   4]
    '''
    print(g)
    '''
[[100   2]
 [  3   4]]
    '''

    # 升维,在指定的位置上添加轴
    i = np.expand_dims(g, axis=2)
    print(i)
    '''
[[[100]
  [  2]]

 [[  3]
  [  4]]]
    '''

    # 降维,删除指定位置的轴
    j = np.squeeze(i, axis=2)
    print(j)
    '''
[[100   2]
 [  3   4]]
    '''


# 改变数组的形状(轴变换)
def sample2():
    a = np.arange(6).reshape(2, 3)
    print(a)
    '''
[[0 1 2]
 [3 4 5]]
    '''

    # 轴对换,即行变列,列变行
    b = np.transpose(a)
    print(b)
    '''
[[0 3]
 [1 4]
 [2 5]]
    '''

    # 交换 0 轴和 1 轴
    c = np.swapaxes(a, 0, 1)
    print(c)
    '''
[[0 3]
 [1 4]
 [2 5]]
    '''

    # 创建一个三维数组
    d = np.zeros((1, 2, 3))
    # 交换数组的轴(新轴0用原轴1的数据,新轴1用原轴0的数据,新轴2用原轴2的数据)
    print(d.transpose(1, 0, 2).shape)
'''
(2, 1, 3)
'''


if __name__ == '__main__':
    # 改变数组的形状(升维,降维)
    sample1()
    # 改变数组的形状(轴变换)
    sample2()

源码 https://github.com/webabcd/PytorchDemo
作者 webabcd

posted @ 2024-09-24 15:04  webabcd  阅读(17)  评论(0编辑  收藏  举报