日新月异 PyTorch - numpy 基础: numpy 数组的创建

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

日新月异 PyTorch - numpy 基础: numpy 数组的创建

示例如下:

numpy\demo1.py

import numpy as np


# 创建数组
def sample1():
    # 通过 np.array() 创建 numpy 数组
    a = np.array([1, 2, 3])
    # dtype 用于获取数组元素的数据类型
    print(a, a.dtype) # [1 2 3] int32
    # 通过 tolist() 将 numpy 数组转换为 python 列表
    print(a.tolist()) # [1, 2, 3]

    b = np.array([1.2, 2.3, 3.4])
    print(b, b.dtype) # [1.2 2.3 3.4] float64

    # 创建数组时可以指定元素的数据类型
    c = np.array([1, 2, 3], dtype=np.float32)
    print(c, c.dtype) # [1. 2. 3.] float32

    # 创建一个二维数组(创建更多维度的数组的方法也是一样的)
    d = np.array([[1, 2, 3], [1.2, 2.3, 3.4]])
    print(d, d.dtype)
    '''
[[1.  2.  3. ]
 [1.2 2.3 3.4]] float64
    '''

    # 创建一个二维数组(创建更多维度的数组的方法也是一样的),第一个维度有 2 个元素,第二个维度有 3 个元素,每个元素的初始值为 0
    e = np.zeros((2, 3), dtype=np.int32)
    print(e)
    '''
[[0 0 0]
 [0 0 0]]
    '''

    # 创建一个二维数组(创建更多维度的数组的方法也是一样的),第一个维度有 2 个元素,第二个维度有 3 个元素,每个元素的初始值为 1
    f = np.ones((2, 3), dtype=np.int32)
    print(f)
    '''
[[1 1 1]
 [1 1 1]]
    '''

    # 创建一个二维数组(创建更多维度的数组的方法也是一样的),第一个维度有 2 个元素,第二个维度有 3 个元素,每个元素的初始值为 10
    g = np.full((2, 3), 10, dtype=np.int32)
    print(g)
    '''
[[10 10 10]
 [10 10 10]]
    '''

    # 创建一个二维数组(创建更多维度的数组的方法也是一样的),第一个维度有 2 个元素,第二个维度有 3 个元素,每个元素的初始值是不确定的(取决于内存的状态)
    i = np.empty((2, 3), dtype=np.int32)
    print(i)
    '''
[[ 858993459 1072902963 1717986918]
 [1073899110  858993459 1074475827]]
    '''

    # 创建一个与指定数组形状一样的数组,并且每个元素的初始值为 10
    # 注:类似的函数还有 zeros_like(), ones_like(), empty_like()
    j = np.full_like([['a', 'b', 'c'], ['x', 'y', 'z']], 10, dtype=np.int32)
    print(j)
    '''
[[10 10 10]
 [10 10 10]]
    '''

    # 创建一个数组,第一个元素是 10,最后一个元素小于 20,步长为 2
    # 注:如果通过 arange 生成浮点元素的话,由于浮点数的计算精度问题,生成的元素个数可能会与预期的不一致
    k = np.arange(10, 20, 2)
    print(k) # [10 12 14 16 18]
    # 创建一个从 0 到 5 的数组(左闭右开),默认步长为 1
    print(np.arange(5)) # [0 1 2 3 4]
    # 创建一个从 -5 到 5 的数组(左闭右开),默认步长为 1
    print(np.arange(-5, 5)) # [-5 -4 -3 -2 -1  0  1  2  3  4]

    # 创建一个数组,第一个元素是 0,最后一个元素是 2,数组共有 10 个元素并组成一个等差数列
    l = np.linspace(0, 2, 10)
    print(l) # [0. 0.22222222 0.44444444 0.66666667 0.88888889 1.11111111 1.33333333 1.55555556 1.77777778 2. ]

    # 创建一个数组,第一个元素为 base 的 start 次幂,最后一个元素为 base 的 stop 次幂,数组共有 num 个元素并组成一个等比数列
    m = np.logspace(start=1, stop=10, num=10, base=2, dtype=np.int32) # [2 4 8 16 32 64 128 256 512 1024]
    print(m)


# 创建随机数组
def sample2():
    # 创建一个随机数组,由 5 个元素组成,每个元素的值在 0 - 1 之间(左闭右开)
    a = np.random.rand(5)
    print(a) # [0.75315474 0.67089008 0.17151009 0.44270476 0.25025423]

    # 创建一个随机二维数组,第一个维度有 2 个元素,第二个维度有 3 个元素,每个元素的值在 0 - 1 之间(左闭右开)
    b = np.random.rand(2, 3)
    print(b)
    '''
[[0.76953115 0.44133723 0.85179982]
 [0.61831559 0.55075848 0.10357527]]
    '''

    # 创建一个整型的随机数组,由 10 个元素组成,每个元素的值在 1 - 5 之间(左闭右开)
    c = np.random.randint(1, 5, 10)
    print(c) # [4 2 1 3 3 4 2 3 1 4]

    # 创建一个整型随机二维数组,第一个维度有 2 个元素,第二个维度有 3 个元素,每个元素的值在 0 - 2 之间(左闭右开)
    d = np.random.randint(0, 2, size=(2, 3))
    print(d)
    '''
[[1 0 1]
 [0 0 0]]
    '''

    # 创建一个随机数组,由 10 个元素组成,生成的元素满足正态分布(中间多两边少)
    e = np.random.randn(10)
    print(e) # [ 0.66374357  0.93564559  0.6737554  -0.06053103  0.98480307 -0.58456542 -0.02358387 -0.03625614  0.1381879  -0.09059425]

    # 创建一个随机二维数组,第一个维度有 2 个元素,第二个维度有 5 个元素,生成的元素满足正态分布
    f = np.random.randn(2, 5)
    print(f)
    '''
[[-1.22189616  0.71962758 -0.91087972 -0.14592619 -0.20833151]
 [-0.43292445  0.36449053  0.11183632 -1.07638197  0.93133669]]
    '''

    # 创建一个随机数组,由 10 个元素组成,生成的元素满足正态分布,且正态分布的均值为 0,标准差为 1
    # 注:正态分布的均值就是所有数的平均值,标准差就是数据离平均值的距离的平均值,标准差越小则正态分布图越陡峭
    g = np.random.normal(0, 1, 10)
    print(g) # [-0.23735497 -1.36411278  0.17218445  0.31930431  0.73154514 -0.02001482  1.42222971 -0.97831937 -0.28327927 -0.30583383]

    # 创建一个随机二维数组,第一个维度有 2 个元素,第二个维度有 5 个元素,生成的元素满足正态分布,且正态分布的均值为 0,标准差为 1
    h = np.random.normal(0, 1, size=(2, 5))
    print(h)
    '''
[[ 1.32418668  1.24857085  0.59898245 -0.58185689 -0.57412149]
 [-0.31750424  0.01306116  0.18447852 -0.40649248 -0.3384305 ]]
    '''


# 从已有数据创建数组
def sample3():    
    # 通过 np.asarray() 或 np.array() 创建 numpy 数组
    # 注:
    # 如果原来的数据是 numpy 数组,则 np.asarray() 只是复制指针,而 np.array() 会复制数据
    # 如果原来的数据是 python 原生的,则无论 np.asarray() 还是 np.array() 都会复制数据
    a = np.asarray([1, 2, 3])
    print(a) # [1 2 3]

    # 通过 np.asarray() 或 np.array() 创建 numpy 数组
    b = np.asarray([(1, 2, 3), (4, 5, 6)])
    print(b)
    '''
[[1 2 3]
 [4 5 6]]
    '''
    
    # 将二进制数据转换为 numpy 数组
    # dtype='S1' 的意思是,数组元素为 string 类型,且每个元素为 1 个 string
    c = np.frombuffer(b'abcdef', dtype='S1')
    print(c) # [b'a' b'b' b'c' b'd' b'e' b'f']

    # 将二进制数据转换为 numpy 数组,数组元素为 np.uint8 类型
    d = np.frombuffer(b'123456', dtype=np.uint8)
    print(d) # [49 50 51 52 53 54]
    
    # 将二进制数据转换为 numpy 数组,offset 为数据读取的起始位置,count 为读取的数据量
    e = np.frombuffer(b'abcdef', dtype='S1', offset=1, count=2)
    print(e) # [b'b' b'c']

    # 将可迭代对象转换为 numpy 数组
    f = np.fromiter(range(5), dtype=np.int32)
    print(f) # [0 1 2 3 4]



if __name__ == '__main__':
    # 创建数组
    sample1()
    # 创建随机数组
    sample2()
    # 从已有数据创建数组
    sample3()

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

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