Python numpy库有关数组的基本操作

复制以下的代码,选择运行的函数,验证有关数组的操作。
相关参考:Python语言程序设计(上海交通大学出版社 赵璐主编)<<----传送门
原谅我没有找到电子版,不然一定爬下来

解释和输出都在注释中

# -*- coding: utf-8 -*-
import numpy as np


# 创建数组的相关操作----------------------------------------------------------------------------------------
def arrayTest():
    """ 
    核心对象ndarray,称为n维数组,由同质元素组成,元素数量是事先定义好的

    同质是指元素的类型相同,即数组的dtype属性,此属性可以指定

    以下为使用array()函数创建numpy数组的实例

    """

    # 创建一维数组
    aArray = np.array([1, 2, 3])
    print(type(aArray))  # <class 'numpy.ndarray'>
    print(aArray.ndim)  # 秩,数组的维数 1
    print(aArray.size)  # 元素的个数 3
    print(aArray.shape)  # 数组的形状,返回类型为元组 (3,)
    print(aArray.dtype)  # 数组的元素类型 int32
    print(aArray.itemsize)  # 元素占用的字节数 4

    # 创建二维数组
    bArray = np.array([[1, 2, 3], [4, 5, 6]])
    print(bArray.ndim)
    print(bArray.size)
    print(bArray.shape)  # (2,3)
    print(bArray.dtype)
    print(bArray.itemsize)  # 4

    # 制定类型
    cArray = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int64)
    print(cArray.dtype)  # int64


# 创建数组的其他方法----------------------------------------------------------------------------------------
def createAnArray():
    """ 
    除了array()函数创建数组,还有其它多种函数

    如果在交互式的模式下,如python终端,IDLE等,在不用print函数的情况下,输出时行和列之间加逗号 ','

    若用print函数输出则行和列之间不加逗号 ','

    """

    # arange(start=None, stop, step=None, , dtype=None),与array()功能类似,但支持浮点数
    Array1 = np.arange(10.0)
    print(Array1)  # [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]

    # linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
    # 创建一个指定的起止值,等分数的等差数组,num为数组元素个数
    Array2 = np.linspace(1, 10, 4)
    print(Array2)  # [ 1.  4.  7. 10.]

    # ones(shape, dtype=None, order='C')创建全1数组
    Array3 = np.ones(shape=5)
    print(Array3)  # [1. 1. 1. 1. 1.]
    Array4 = np.ones((2, 3))  # 创建两行三列的全1数组
    print(Array4)
    # [[1. 1. 1.]
    #  [1. 1. 1.]]

    # zeros(hape, dtype=float, order='C')创建全0数组
    Array5 = np.zeros((2, 3))
    print(Array5)
    # [[0. 0. 0.]
    #  [0. 0. 0.]]

    # full(shape, fill_value, dtype=None, order='C')创建每个元素都是full_value的数组
    Array6 = np.full((3, 4), 2)
    print(Array6)
    # [[2 2 2 2]
    #  [2 2 2 2]
    #  [2 2 2 2]]

    # eye(N, M=None, k=0, dtype=float, order='C')创建N行,M列的单位数组
    # M省略时,创建N行,N列的单位数组
    Array7 = np.eye(3, dtype=int)
    print(Array7)
    # [[1 0 0]
    #  [0 1 0]
    #  [0 0 1]]
    Array8 = np.eye(3, 5, dtype=int)
    print(Array8)
    # [[1 0 0 0 0]
    #  [0 1 0 0 0]
    #  [0 0 1 0 0]]

    # random.rand(d0,d1,...,dn)创建n维数组,元素为0~1之间的随机小数
    Array9 = np.random.rand(2, 3)
    print(Array9)
    # [[0.23277296 0.21518778 0.62794264]
    #  [0.11016466 0.26008708 0.08924181]]


# 数组的相关运算------------------------------------------------------------------------------------------
def basicOperation():
    """ 
    数组的基本运算,与列表不同,列表是元素个数的变化,而这是元素数值的变化

    除了相同形状的数组可以进行运算外,不同形状的数组也可以进行相关运算

    Array4对Array3进行广播计算,即对Array3的每一行都做运算,前提是两数组要 “形状兼容”

    """

    Array1 = Array2 = np.ones((2, 3), dtype=int)
    print(Array1+Array2)
    # [[2 2 2]
    #  [2 2 2]]

    print(Array1-Array2)
    # [[0 0 0]
    #  [0 0 0]]

    print(Array1*Array2)
    # [[1 1 1]
    #  [1 1 1]]

    print(Array1/Array2)
    # [[1. 1. 1.]
    #  [1. 1. 1.]]

    Array3 = np.ones((2, 3), dtype=int)
    Array4 = np.arange(3)
    print(Array3+Array4)
    # [[1 2 3]
    #  [1 2 3]]

    print(Array3+Array4 > 2)
    # [[False False  True]
    #  [False False  True]]

    print(Array3 < Array4)
    # [[False False  True]
    #  [False False  True]]

    # 数组和普通值的计算
    print(Array3+1)
    # [[2 2 2]
    #  [2 2 2]]
    print(Array3*5)
    # [[5 5 5]
    #  [5 5 5]]


# 数组的切片和索引-----------------------------------------------------------------------------------------
def theIndexSection():
    """ 
    ndarray与序列一样也可以进行索引和切片的操作,方式与序列类似

    ndarray可以在不同的维度上进行

    """
    room = np.array([[[0, 1, 2, 3],
                      [4, 5, 6, 7],
                      [8, 9, 10, 11]],
                     [[12, 13, 14, 15],
                      [16, 17, 18, 19],
                      [20, 21, 22, 23]]])

    # room数组是一个2*3*4的三维数组,想象成两层楼,每层又有3行4列
    print(room)
    # [[[0  1  2  3]
    #   [4  5  6  7]
    #   [8  9 10 11]]

    #  [[12 13 14 15]
    #   [16 17 18 19]
    #   [20 21 22 23]]]

    # 输出0层楼0行0列房间的内容
    print(room[0, 0, 0])  # 0 也可以写成room[0][0][0]

    # 如果不关心楼层,输出每一层的0行0列的内容,可以将楼层用冒号 ':' 代替
    print(room[:, 0, 0])  # [ 0 12]

    # 同理,还有很多切片方式,获取指定位置信息
    print(room[0, :, :])
    # [[0  1  2  3]
    #  [4  5  6  7]
    #  [8  9 10 11]]
    print(room[0, 1, :])  # [4 5 6 7]

    # 选定间隔的房间
    print(room[0, 1, 0:4:2])  # [4 6]  获取第0层,1行,第0列和第2列的内容 0,4,2依次为起始,终止,步长


# 改变数组的形状------------------------------------------------------------------------------------------
def formChange():

    # reshape(shape)函数改变数组的形状,返回一个指定形状的数组,不会改变原数组
    Array1 = np.arange(12)
    Array2 = Array1.reshape((2, 6))
    print(Array2)
    # [[0  1  2  3  4  5]
    #  [6  7  8  9 10 11]]

    Array3 = Array1.reshape((2, 2, 3))
    print(Array3)
    # [[[0  1  2]
    #   [3  4  5]]

    #  [[6  7  8]
    #   [9 10 11]]]

    print(Array1)  # [ 0  1  2  3  4  5  6  7  8  9 10 11]

    # resize(new_space)直接改变原数组,返回空值
    Array1.resize((3, 4))
    print(Array1)
    # [[0  1  2  3]
    #  [4  5  6  7]
    #  [8  9 10 11]]

    print(type(Array1))  # < class 'numpy.ndarray' >
    print(type(Array1.resize((3, 4))))  # <class 'NoneType'>

    # transpose(*axes)函数实现对数组按轴进行转置,即维度的变换,返回转置后的新数组
    Array4 = Array1.transpose()
    print(Array4)
    # [[0  4  8]
    #  [1  5  9]
    #  [2  6 10]
    #  [3  7 11]]
    print(Array1)
    # [[0  1  2  3]
    #  [4  5  6  7]
    #  [8  9 10 11]]

    # 若参数为空,则默认为完全转置,当要按指定维度进行转置时,可用元组方式重新编排轴的顺序
    # 0,1,2 分别代表着 层,行,列
    Array5 = np.arange(24).reshape((2, 3, 4))
    print(Array5)
    # [[[0  1  2  3]
    # [4  5  6  7]
    # [8  9 10 11]]

    # [[12 13 14 15]
    # [16 17 18 19]
    # [20 21 22 23]]]

    print(Array5.transpose())  # 完全转置,轴的顺序变为(2,1,0)
    # [[[0 12]
    #   [4 16]
    #   [8 20]]

    #  [[1 13]
    #   [5 17]
    #   [9 21]]

    #  [[2 14]
    #   [6 18]
    #   [10 22]]

    #  [[3 15]
    #   [7 19]
    #   [11 23]]]

    print(Array5.transpose(0, 2, 1))  # 行列转置
    # [[[0  4  8]
    #   [1  5  9]
    #   [2  6 10]
    #   [3  7 11]]

    #  [[12 16 20]
    #   [13 17 21]
    #   [14 18 22]
    #   [15 19 23]]]

    # flatten()函数用来展平数组,即把高纬度数组转换为一维数组,返回一个新的一维数组
    Array6 = np.arange(6).reshape(2, 3)
    print(Array6)
    # [[0 1 2]
    #  [3 4 5]]
    Array7 = Array6.flatten()
    print(Array7)  # [0 1 2 3 4 5]
    print(Array6)
    # [[0 1 2]
    #  [3 4 5]]


# 数组的相关计算------------------------------------------------------------------------------------------
def statistical():
    """ 
    sum()           按指定轴返回数组元素的和

    mean()          按指定轴返回数组元素的均值

    max()           按指定轴返回数组元素的最大值

    min()           按指定轴返回数组元素的最小值

    std()           按指定轴返回数组元素的标准差

    argmin()        按指定轴返回数组元素最小元素对应的索引构成的数组

    argmax()        按指定轴返回数组元素最大元素对应的索引构成的数组

    cumsum()        按指定轴返回数组元素的累积的和

    cumprod()       按指定轴返回数组元素的累积的积

    """

    Array = np.arange(6).reshape((2, 3))
    print(Array.sum())  # 求所有元素的和 15
    print(Array.sum(axis=0))  # 按0轴方向求和,即按行求和,并组成新数组返回  [3 5 7]
    print(Array.sum(axis=1))  # 按1轴方向求和,即按列求和,并组成新数组返回  [ 3 12]
    print(Array.max())  # 5
    print(Array.max(axis=0))  # [3 4 5]
    print(Array.max(axis=1))  # [2 5]
    print(Array.cumsum(axis=0))  # 按0轴方向累积求和,即当前行是前面所有元素的和
    # [[0 1 2]
    #  [3 5 7]]

    print(Array.cumsum(axis=1))  # 按1轴方向累积求和,即当前列是前面所有元素的和
    # [[0  1  3]
    #  [3  7 12]]


# 选择要验证的函数-----------------------------------------------------------------------------------------
def main():
    # arrayTest()
    # createAnArray()
    # basicOperation()
    # theIndexSection()
    # formChange()
    # statistical()


if __name__ == "__main__":
    main()

相关参考:Python语言程序设计(上海交通大学出版社 赵璐主编)<<----传送门

如有错误,欢迎私信纠正
技术永无止境,谢谢支持!

猜你喜欢

转载自blog.csdn.net/pineapple_C/article/details/106929844