前言
这个东西学了好长时间了,一直没时间去发表它。之前看一些大佬说,只用numpy
做机器学习的都是大神。刚开始接触它的时候感觉是:这是啥啊!乱七八糟的(因为把的运算规则都给忘完了)!现在看来,嗯!是这么回事!(所以,永远不要对自己不知道的东西妄下定论。如果下了,到后来就会发现,小丑竟是我自己!)
开搞
1.先安装numpy
,懂的都懂,不懂百度!
2.引入
import numpy as np
3.使用
3.1来先搞个数组玩玩(这是一个普普通通的数组)
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(type(arr)) # <class 'list'>
print("---------------------------------------1")
image.png
3.2使用numpy
的数据类型
array1 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
print(type(array1)) # <class 'numpy.ndarray'>
print(array1 + 1)
print("---------------------------------------2")
image.png
3.3numpy
操作
array2 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
print(array2 + array2)
print(array2 - array2)
print(array2 * array2) # 相乘的第一种方法
print(np.multiply(array2, array2)) # 相乘的第二种方法
print(np.dot(array2, array2)) # 相乘的第三种方法,得到的是一个数,这个方法是一个真正的矩阵的乘法
print(array2 / array2)
print("---------------------------------------3")
image.png
3.4numpy
基本api
_list = [1, 2, 3, 4, 5, 6]
array3 = np.array(_list)
print(array3)
print(array3.dtype) # int32
print(array3.size)
print(array3.ndim) # 维度
array3.fill(0)
print(array3) # 矩阵的填充
print("---------------------------------------4")
image.png
3.5numpy
索引和切片
array4 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
print(array4[0]) # 第一个数
print(array4[-1]) # 最后一个数
print(array4[0:2]) # 第0个到第1个
print(array4[:-1]) # 最后一个不取
print(array4[-3:]) # 从倒数第3个开始取到最后一个值
print("---------------------------------------")
array5 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(array5.shape) # 形状
print(array5.size) # 大小
print(array5.ndim) # 维度
array5[1][1] = 10
print(array5) # 取某一个值
print(array5[1]) # 取一行值
print(array5[:, 1]) # 取一列值
print(array5[:, 0:2]) # 取2列值
print(array5[0:2, 0:2]) # 取2行的2列值
print("---------------------------------------5")
image.png
3.6numpy
矩阵的赋值 copy
copy = array5.copy() # 可以看出这个方法是将array5的数据给复制了一份给了copy,如果直接 = ,就是把地址值给了copy,这时就会出现两个矩阵数据都被修改了
copy[1][1] = 50
print(copy)
print(array5)
print("---------------------------------------6")
image.png
3.7numpy
简单的生成ndarray矩阵的方法
array6 = np.arange(0, 100) # 生成从0到100的一维矩阵
print(array6)
array7 = np.arange(0, 100, 10) # 从0到100中隔10个取一个
print(array7)
mask = np.array([1, 0, 3, 0, 5, 0, 7, 0, 9], dtype=bool)
print(mask)
print(array4[mask]) # 当它为true的时候就打印出来
print("---------------------------------------7")
image.png
3.8numpy
构造随机数并相加
rand = np.random.randint(0, 100)
print(rand)
randint = np.random.randint(1, 10, size=(3, 3)) # 生成1-10的随机数,并排成3行3列
print(randint)
# 维度从0开始算,例如二维矩阵就是0和1,axis就是维度号
print(randint.ndim)
np_sum = np.sum(randint) # 求和
print(np_sum)
np_sum2 = np.sum(randint, axis=0) # 每一个维度按列求和
print(np_sum2)
np_sum3 = np.sum(randint, axis=1) # 每一个维度按行求和
print(np_sum3)
randint2 = np.random.randint(1, 10, size=(3, 3, 3)) # 生成1-10的随机数,并排列成3维矩阵
print(randint2)
n = np.sum(randint2, axis=2)
# axis=0是取这个三维矩阵中每一个二维矩阵中相同位置的一维矩阵中相同位置的数相加
# axis=1是取这个三维矩阵中每一个二维矩阵中每一个一维矩阵中相同位置的数相加
# axis=2是取这个三维矩阵中每一个二维矩阵中同一个一维矩阵中所有的数相加
print(n)
print("---------------------------------------8")
image.png
3.9numpy
乘积以及一些常用api
randint3 = np.random.randint(0, 10, size=(2, 2))
print(randint3)
print(randint3.prod(axis=0)) # 按列求积
print(randint3.prod(axis=1)) # 按行求积
print(randint3.max(axis=0)) # 求最大值
print(randint3.min(axis=0)) # 求最小值
print(randint3.argmax(axis=0)) # 求最大值索引
print(randint3.argmin(axis=0)) # 求最小值索引
print(randint3.mean(axis=0)) # 按列求均值
print("---------------------------------------9")
image.png
3.10numpy
排序
randint4 = np.random.randint(0, 10, size=(2, 5))
print(randint4)
print(np.sort(randint4, axis=0)) # 按列排序
print(np.sort(randint4, axis=1)) # 按行排序
print(np.argsort(randint4, axis=0)) # 按列排序并显示它原来的索引位置
print(np.argsort(randint4, axis=1)) # 按行排序并显示它原来的索引位置
print("---------------------------------------10")
image.png
3.11numpy
操作矩阵形状
randint5 = np.random.randint(0, 10, size=(2, 5))
print(randint5.shape)
randint5.shape = 10 # 变成了一位矩阵
print(randint5)
randint5.shape = 1, 10 # 1*10=2*5,重新规定形状为1*10的
print(randint5)
reshape = randint5.reshape(1, 10) # 规定为1*10的矩阵的另一种方式
print(reshape)
randint5.shape = 5, 2 # 5*2=2*5
print(randint5)
newaxis_ = randint5[np.newaxis, :] # 在前面新增一个维度
print(newaxis_)
print(newaxis_.shape)
newaxis_2 = randint5[:, np.newaxis] # 在中间新增一个维度
print(newaxis_2)
print(newaxis_2.shape)
newaxis_3 = randint5[:, :, np.newaxis] # 在后面新增一个维度
print(newaxis_3)
print(newaxis_3.shape)
newaxis_4 = newaxis_3.squeeze() # 压缩空的维度
print(newaxis_4)
print(newaxis_4.shape)
newaxis_5 = newaxis_4.T # 矩阵的转置
print(newaxis_5)
print(newaxis_5.shape)
print("---------------------------------------11")
image.png
3.12numpy
矩阵连接
arr1 = np.random.randint(10, size=(2, 5))
print(arr1)
arr2 = np.random.randint(10, size=(2, 5))
print(arr2)
concatenate = np.concatenate((arr1, arr2), axis=1) # 矩阵的拼接是按元组的形式传进去的,并且指定在哪个维度上进行拼接
# axis=0时把后面的矩阵直接拼到第一个矩阵的后面
# axis=1时把后面的矩阵第一行拼到第一个矩阵的第一行,依次类推
print(concatenate)
zeros = np.zeros((2, 3)) # 这里面必须放一个形状,就是指定几行几列,指定一个2行3列的全0的矩阵
print(zeros)
ones = np.ones((3, 3)) # 这里面必须放一个形状,就是指定几行几列,指定一个3行3列的全1的矩阵
print(ones)
print("---------------------------------------12")
image.png
3.13numpy
矩阵的比较
arange__reshape1 = np.arange(0, 6).reshape(2, 3)
arange__reshape2 = np.arange(0, 6).reshape(2, 3)
print(arange__reshape1 == arange__reshape2)
arange__reshape2[0][2] = 10
print(arange__reshape1 == arange__reshape2)
print("---------------------------------------13")
image.png