numpy是一个第三方库,支持大量高纬度数组与矩阵运算。此外,它也针对数组运算提供大量的数字函数。机器学习涉及到大量对数组的变化和运算,numpy就成为必不可少的工具之一。

        使用numpy,可以做以下操作:
                1. 数组的算数和逻辑运算
                2. 傅立叶变换和用于图形操作的例程【所谓例程,就是某个系统对外提供的功能接口或服务的集合】
                3. 与线性代数有关的操作,numpy用于线性代数和随机数生成的内置函数

        numpy的主要对象是多维数组 Ndarray,在numpy中维度Dimensions叫做轴Axes,轴的个数叫做秩Rank
        需要注意的是:numpy.array和Python标准库中array.array并不相同,前者更为强大

主要的操作有:

一、数组创建
1.查看numpy的版本

import numpy as np
version = np.__version__
print(version)

运行结果为:

python 李代数 python代数运算库_python 李代数


2.通过列表创建一维数组

import numpy as np
list_ = [1, 2, 3, 4, 5]
arr = np.array(list_)
print(arr)

运行结果为:

python 李代数 python代数运算库_数组_02


3.通过列表创建二维数组

import numpy as np
tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
# 无论是使用列表还是元组,都能进行创建
list_ = (tuple1, tuple2)
arr = np.array(list_)
print(arr)
list_ = [list(tuple1), list(tuple2)]
arr = np.array(list_)
print(arr)

运行结果为:

python 李代数 python代数运算库_数组_03


4.创建全为 0 的二维数组

import numpy as np
# 这里传入的参数,元组和列表都可
arr = np.zeros((3, 4))
print(arr)
arr = np.zeros([3, 4])
print(arr)

运行结果为:

python 李代数 python代数运算库_python 李代数_04


5.创建全为 1 的三维数组

import numpy as np
# 这里传入的参数,也是元组和列表都可
arr = np.ones((3, 4))
arr = np.ones([3, 4])
print(arr)

运行结果为:

python 李代数 python代数运算库_开发语言_05


6.使用full函数,创建任意大小的数组并填充任意数字

import numpy as np
# 这里传入的参数,也是元组和列表都可
arr = np.full((3, 4), 5)
arr = np.full([3, 4], 5)
print(arr)

运行结果为:

python 李代数 python代数运算库_开发语言_06


7.创建一维等差数组

import numpy as np
'''
第一个参数:开始位置【包括】
第二个参数:结束位置【不包括】
第三个参数:步长
'''
arr = np.arange(0, 5, 2)
print(arr)

运行结果为:

python 李代数 python代数运算库_开发语言_07


8.创建二维等差数组

import numpy as np
# 创建了一维等差数组后,再使用reshape函数,将其变为二维等差数组
arr = np.arange(1, 7, 1).reshape(2, 3)
print(arr)

运行结果为:

python 李代数 python代数运算库_数组_08

注意:如果在reshape函数中传入的参数不能将一维等差数组平均分配,就会报错

import numpy as np
arr = np.arange(1, 7, 1).reshape(4, 2)
print(arr)

运行结果为:

python 李代数 python代数运算库_pycharm_09


9.创建单位矩阵(二维数组)

import numpy as np
arr = np.eye(3)
print(arr)

运行结果为:

python 李代数 python代数运算库_开发语言_10


10.创建二维随机数组

import numpy as np
arr = np.random.rand(2, 3)
print(arr)

运行结果为:

python 李代数 python代数运算库_pycharm_11


11.创建二维随机整数数组

import numpy as np
"""
前两个参数,用来指定范围,包括第一个参数,不包括第二个,因为如果想要创建一维数组的话,还可以这样写:
    np.random.randint(1, 2, size=(2, 3))
size参数,主要是用来指定数组大小,这里传入的参数,也是元组和列表都可
"""
arr = np.random.randint(1, 5, size=(2, 3))
arr = np.random.randint(1, 5, size=[2, 3])
print(arr)

 运行结果为:

python 李代数 python代数运算库_pycharm_12

二、数组运算

1.sum

import numpy as np
a = np.array([[1, 2], [3, 4]])
arr = np.sum(a)
print(arr)
# axis=0 表示对每一列求和
arr = np.sum(a, axis=0)
print(arr)
# axis=1 表示对每一行求和
arr = np.sum(a, axis=1)
print(arr)

运行结果为:

python 李代数 python代数运算库_数组_13


2.mean 【求平均值】

import numpy as np
a = np.array([[1, 2], [3, 4]])
arr = np.mean(a)
print(arr)

运行结果为:

python 李代数 python代数运算库_python_14


3.tile

import numpy as np
a = np.array([[1, 2], [3, 4]])
# 对数组a进行改变,行数不变,列数乘以2倍
arr = np.tile(a, (1, 2))
print(arr)
# 对数组a进行改变,列数不变,行数乘以2倍
arr = np.tile(a, (2, 1))
print(arr)

运行结果为:

python 李代数 python代数运算库_python_15


4.argsort

import numpy as np
a = np.array([[3, 6, 4, 11],
              [5, 10, 1, 3]])
# 将元素安装行从小到大进行排序,返回对应位置的元素的下标
res = a.argsort()
print(a)
print(res)
# 按照列排序
res = a.argsort(axis=0)
print(a)
print(res)

运行结果为:

python 李代数 python代数运算库_pycharm_16


5.一维数组加法运算

import numpy as np
a = np.array([10, 20, 30, 40, 50])
b = np.arange(1, 6)
print(a)
print(b)
arr = a + b
print(arr)

运行结果为:

python 李代数 python代数运算库_python 李代数_17


6.一维数组减法运算

import numpy as np
a = np.array([10, 20, 30, 40, 50])
b = np.arange(1, 6)
print(a)
print(b)
arr = a - b
print(arr)

运行结果为:

python 李代数 python代数运算库_数组_18


7.一维数组乘法运算

import numpy as np
a = np.array([10, 20, 30, 40, 50])
b = np.arange(1, 6)
print(a)
print(b)
arr = a * b
print(arr)

运行结果为:

python 李代数 python代数运算库_数组_19


8.一维数组除法运算

import numpy as np
a = np.array([10, 20, 30, 40, 50])
b = np.arange(1, 6)
print(a)
print(b)
arr = a / b
print(arr)

运行结果为:

python 李代数 python代数运算库_数组_20


9.二维数组的运算

import numpy as np
# 在相应的位置上进行加减乘除
# 加法
a = np.array([[1, 2],
              [3, 4]])
b = np.array([[5, 6],
              [7, 8]])
print(a)
print(b)
arr = a + b
print(arr)
# 减法
print(a)
print(b)
arr = a - b
print(arr)
# 乘法
print(a)
print(b)
arr = a * b
print(arr)
# 除法
print(a)
print(b)
arr = a / b
print(arr)

运行结果为:

C:\Users\EDY\AppData\Local\Programs\Python\Python39\python.exe D:\Practice\numpy\练习.py 
[[1 2]
 [3 4]]
[[5 6]
 [7 8]]
[[ 6  8]
 [10 12]]
[[1 2]
 [3 4]]
[[5 6]
 [7 8]]
[[-4 -4]
 [-4 -4]]
[[1 2]
 [3 4]]
[[5 6]
 [7 8]]
[[ 5 12]
 [21 32]]
[[1 2]
 [3 4]]
[[5 6]
 [7 8]]
[[0.2        0.33333333]
 [0.42857143 0.5       ]]

Process finished with exit code 0

10.矩阵乘法运算【注意与9的区别】

import numpy as np
# 这里的乘法,使用的是线性代数中矩阵的乘法,而不是上面在对应的位置进行相乘
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
arr = np.dot(a, b)
print(arr)

运行结果为:

python 李代数 python代数运算库_数组_21


11.如果使用 np.mat 将二维数组准确定义为矩阵,就可以直接使用 * 完成矩阵乘法计算

import numpy as np
# 简单说就是实现矩阵相乘的另一种写法
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
arr = np.mat(a) * np.mat(b)
print(arr)

运行结果为:

python 李代数 python代数运算库_pycharm_22


12.转置矩阵

import numpy as np
a = np.array([[1, 2], [3, 4]])
print(a)
arr = a.T
print(arr)

运行结果为:

python 李代数 python代数运算库_python_23


13.矩阵求逆

import numpy as np
a = np.array([[1, 2], [3, 4]])
print(a)
arr = np.linalg.inv(a)
print(arr)

运行结果为:

python 李代数 python代数运算库_pycharm_24


14.广播

import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = np.array([1, 2, 3])
# 要想实现在a的每一行上加上b,可以这么写
arr = a + np.tile(b, (3, 1))
print(arr)
# 但是在numpy中,能够自动实现广播功能,即当参与运算的操作数的维度不一样时,会自动将其转换成相同的维度,并进行运算
arr = a + b
print(arr)

 运行结果为:

python 李代数 python代数运算库_python_25

三、索引

1.取出某个确定的值

import numpy as np
a = np.array([[1, 2, 3, 4],
             [5, 6, 7, 8],
             [9, 10, 11, 12]])
# 第一个参数代表一维,第二个参数代表二维,以此类推
print(a[1, 2])

运行结果为:

python 李代数 python代数运算库_python_26


2.取出某个范围的值

import numpy as np
a = np.array([[1, 2, 3, 4],
             [5, 6, 7, 8],
             [9, 10, 11, 12]])
# 用冒号来区分每个维度,和切片一样
# 代表着指定的范围为:从第二行开始,到最后,每一行中取最后一个元素
print(a[1:, -1:])

运行结果为:

python 李代数 python代数运算库_python 李代数_27


3.给某个范围的数进行运算

import numpy as np
a = np.array([[1, 2, 3, 4],
             [5, 6, 7, 8],
             [9, 10, 11, 12]])
# 将数组a中的第二列上的每个数加上10
a[np.arange(3), 1] += 10
print(a)
# 还可以这样写,相当于一行对应一个列
a[[0, 1, 2], [1, 1, 2]] += 10
print(a)

运行结果为:

python 李代数 python代数运算库_python 李代数_28


4.获取数组中大于或小于某个确定值的数值

import numpy as np
a = np.array([[1, 2, 3, 4],
             [5, 6, 7, 8],
             [9, 10, 11, 12]])
result_index = a > 10
print(result_index)
print(a[result_index])
# 简化后
print(a[a > 10])

 运行结果为:

python 李代数 python代数运算库_数组_29

四、判断元素数据类型并进行转换

1.使用dtype函数查看数组的数据类型,并且在创建数组时,可以使用dtype参数进行数据类型转换

import numpy as np
a = np.array([1, 2,  3])
print(a.dtype)
a = np.array([1.1, 2.2])
print(a.dtype)
a = np.array([1, 1.2])
print(a.dtype)
# 将数据类型转换为整数,直接去掉小数部分,并不会四舍五入
a = np.array([1.1, 2.6], dtype=np.int64)
print(a)
print(a.dtype)

运行结果为:

python 李代数 python代数运算库_python_30


2.使用astype转换数据类型

import numpy as np
a = np.array(['1.2', '1.3', '1.4'], dtype=np.string_)
print(a)
print(a.dtype)
a = np.array(['1.2', '1.3', '1.4']).astype(np.float_)
print(a)

 运行结果为:

python 李代数 python代数运算库_python_31

 

 注意:在使用astype函数进行传参时,不能写 np.float,否则会报错

import numpy as np
a = np.array(['1.2', '1.3', '1.4'], dtype=np.string_)
print(a)
print(a.dtype)
a = a.astype(np.float)
print(a)

 运行结果为:

python 李代数 python代数运算库_数组_32