作者:初次知晓
邮箱:[email protected]
笔记分享:百度网盘分享链接
百度云盘链接:https://pan.baidu.com/s/1VXHLlMsRvrzcY0d6W0LPsA?pwd=b8m1
提取码:b8m1
本人为中职在读学生,博客内容或有错误,我愿意接受并吸取任何人的意见
学习来源参考以下网站或视频:菜鸟教程,千锋教育系列视频,黑马程序员系列视频
Ddarray的基本操作有两种
1.索引操作
[ 1 2 3 4 5 6 7 8 9 10]
一维数组与列表完全一致
print(a[0],a[-1])
1 10
0,表示第一个数据
-1表示倒数第一个数据
[[2 1 1 1]
[4 2 9 5]]
对于二维(多维)数组,直接使用索引[0],[-1]
print(a[0],a[-1])
[2 1 1 1] [4 2 9 5]
会得到该行的全部数据,因此需要进行索引嵌套
print(a[0][0],a[-1][-1])
2 5
也可以简写:print(a[0,0],a[-1,-1])
2 5
[[[2 1 1 1]
[4 2 9 5]]
[[2 1 1 1]
[4 2 9 5]]]
三维及以上数组有 块 的概念,因此先指定哪一块,在指定是哪一行的哪一个数据
print(a[0,0,0],a[-1,-1,-1]) #a[0,0,0]:第一块,第一行,第一个数据 | a[-1,-1,-1]:最后一块,最后一行,最后一个数据
2 5
索引的用处?
1.修改指定范围的数据
[[[2 1 1 1]
[4 2 9 5]]
[[2 1 1 1]
[4 2 9 5]]]
我想把加粗的2改为10
a[0,0,0] = 10
print(a)
[[[10 1 1 1]
[ 4 2 9 5]]
[[ 2 1 1 1]
[ 4 2 9 5]]]
使用这种方法还可以直接更改某一行的全部数据
a[0,0] = 10
print(a)
[[[10 10 10 10]
[ 4 2 9 5]]
[[ 2 1 1 1]
[ 4 2 9 5]]]
切片(slice):作用是从序列中取出一部分相应的元素重新组成一个序列
一维数组:a[ 1 2 3 4 5 6 7 8 9 10]
我想取到2-6的数据
b = a[1:7]
print(b)
[2 3 4 5 6 7]
特殊操作:b = a[::-1]
[10 9 8 7 6 5 4 3 2 1]
将数组的数据全部反转过来
对于二维的(多维)数据
[[[2 1 1 1]
[4 2 9 5]]
[[2 1 1 1]
[4 2 9 5]]]
可以直接用索引取出一行数据:b = a[0,0]
print(b)
[2 1 1 1]
语法:接收变量 = 数组[(块数),行数]
或者取多行 b = a[0,0:2]
print(b)
[[2 1 1 1]
[4 2 9 5]]
语法:接收变量 = 数组[(块数),起始行:结束行]
或者取不连续的多行:b = a[0,[0,1]]
print(b)
[[2 1 1 1]
[4 2 9 5]]
语法:接收变量 = 数组[(块数),[行1,行2,…,行n]]
[[2 1 1 1]
[4 2 9 5]
[2 1 1 1]
[4 2 9 5]]
也可以直接取一列数据:b =a[1:4,0]
print(b)
[4 2 4]
语法:接收变量 = 数组[起始行:结束行,列数]
或者取连续的多列:b =a[:,2:5]
print(b)
[[1 1]
[9 5]
[1 1]
[9 5]]
语法:接收变量 = 数组[起始行:结束行,起始列:结束列]
或者取不连续的多列:b =a[:,[1,2,3]]
print(b)
[[1 1 1]
[2 9 5]
[1 1 1]
[2 9 5]]
语法:接收变量 = 数组[起始行:结束行,[列1,列2,…,列n]]
1.求和
将数组内的值求和
语法:接收变量 = numpy.sum(数组名,axis = None)
axis = 0 表示计算行(行和行求和)求和(由上至下)
axis = 1 表示计算列(列和列求和)求和(由左至右)
n1 = np.arange(1,13)
n2 = np.reshape(n1,(3,4))
print(n2)
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
n2 = np.sum(n2,axis = 1)
print(n2)
[10 26 42]
n2 = np.sum(n2,axis = 0)
print(n2)
[15 18 21 24]
2.求最大值
求一个数组中的最大值
语法:接收变量 = numpy.max(数组名)
n1 = np.arange(1,11)
print(n1)
[ 1 2 3 4 5 6 7 8 9 10]
n1 = max(n1)
print(n1)
10
3.求最小值
求一个数组中的最小值
语法:接收变量 = numpy.min(数组名)
n1 = np.arange(1,11)
print(n1)
[ 1 2 3 4 5 6 7 8 9 10]
n1 = min(n1)
print(n1)
1
4.求平均值
语法:接收变量 = numpy.mean(数组名)
接收变量 = numpy.average(数组名)
n1 = np.arange(1,11)
print(n1)
[ 1 2 3 4 5 6 7 8 9 10]
n1 = np.mean(n1)//average效果一致
print(n1)
5.5
5.求中位数
语法:接收变量 = numpy.median(数组名)
一组数据中排在中间位置的数,如果时项数为偶数,则求其平均值
n1 = np.arange(1,11)
print(n1)
[ 1 2 3 4 5 6 7 8 9 10]
n1 = np.median(n1)
print(n1)
5.5
6.求百分位数
语法:接收变量 = numpy.percentile(数组名,q = None)
q = 50 表示中位数(q为百分比)
n1 = np.arange(1,11)
print(n1)
[ 1 2 3 4 5 6 7 8 9 10]
5.5
n1 = np.percentile(n1,50)
print(n1)
7.求第一个最大值下标
语法:接收变量 = numpy.argmax(数组名)
n1 = np.arange(1,11)
print(n1)
[ 1 2 3 4 5 6 7 8 9 10]
n1 = np.argmax(n1)
print(n1)
9
8.求第一个最小值下标
语法:接收变量 = numpy.argmin(数组名)
n1 = np.arange(1,11)
print(n1)
[ 1 2 3 4 5 6 7 8 9 10]
n1 = np.argmin(n1)
print(n1)
0
9. 根据条件求所有符合条件的数据下标
语法:接收变量 = numpy.argwhere(条件)
n1 = np.arange(1,11)
print(n1)
[ 1 2 3 4 5 6 7 8 9 10]
n1 = np.argwhere(n1 == np.max(n1))
print(n1)
[[9]]
10.求数组的某次方
语法:接收变量 = numoy.power(数组,次方)
n1 = np.arange(1,11)
print(n1)
[ 1 2 3 4 5 6 7 8 9 10]
n1 = np.power(n1,2)
print(n1)
[ 1 4 9 16 25 36 49 64 81 100]
11.求标准差
方差开平方根
语法:接收变量 = numpy.std(数组)
n1 = np.arange(1,11)
print(n1)
[ 1 2 3 4 5 6 7 8 9 10]
n1 = np.std(n1)
print(n1)
2.8722813232690143
12.求数组的方差
语法:接收变量 = numpy.var(数组)
n1 = np.arange(1,11)
print(n1)
[ 1 2 3 4 5 6 7 8 9 10]
n1 = np.var(n1)
print(n1)
8.25
特殊:当数组中有无法计算的非数字数据时
可以在函数前加上:nan
标准语法格式:接收变量 = numpy.nan函数(函数参数)
基本的矩阵操作:
算术运算符:加减乘除
矩阵和矩阵之间运算
数与矩阵的运算
矩阵乘积
矩阵与矩阵相乘 numpy.dot
广播机制
为不同维度的矩阵尽量提供运算可能性
规则一:为缺失的维度补维度
规则二:缺失元素用已有值填充
n = np.random.randint(0,10,size=(4,5))
print(n)
1.加法
[[6 5 5 8 6]
[5 9 4 6 6]
[3 8 4 6 3]
[5 4 5 5 4]]
n += 10
print(n)
[[16 15 15 18 16]
[15 19 14 16 16]
[13 18 14 16 13]
[15 14 15 15 14]]
2.减法
[[0 1 7 7 0]
[0 6 7 2 3]
[5 9 1 8 4]
[5 8 0 0 8]]
n -= 10
print(n)
[[-10 -9 -3 -3 -10]
[-10 -4 -3 -8 -7]
[ -5 -1 -9 -2 -6]
[ -5 -2 -10 -10 -2]]
3.除法
[[8 4 3 7 6]
[7 3 3 7 9]
[9 7 8 5 5]
[6 3 2 5 8]]
n *= 10
print(n)
[[80 40 30 70 60]
[70 30 30 70 90]
[90 70 80 50 50]
[60 30 20 50 80]]
4.除法
[[1 1 5 5 7]
[4 8 4 0 9]
[8 9 5 8 2]
[5 6 2 3 3]]
n = n / 10
print(n)
[[0.1 0.1 0.5 0.5 0.7]
[0.4 0.8 0.4 0. 0.9]
[0.8 0.9 0.5 0.8 0.2]
[0.5 0.6 0.2 0.3 0.3]]
5.整除
[[0 6 6 3 2]
[6 6 8 7 8]
[7 3 7 5 8]
[1 3 0 9 4]]
n = n // 10
print(n)
[[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]]
6.矩阵间运算
n1 = np.random.randint(0,10,size=(4,5))
n2 = np.random.randint(0,10,size=(4,5))
print(n1)
[[0 8 3 1 8]
[5 6 6 5 1]
[0 6 9 6 3]
[2 5 4 4 0]]
print(n2)
[[7 3 3 0 9]
[1 8 1 7 1]
[6 7 8 7 3]
[0 1 7 5 7]]
n = n1 + n2 # 矩阵间同一位置的元素相加
print(n)
[[ 7 11 6 1 17]
[ 6 14 7 12 2]
[ 6 13 17 13 6]
[ 2 6 11 9 7]]
矩阵间的减乘除一致
语法:接收变量 = numpy.dot()
要求:第一个矩阵的列数 等于 第二个矩阵的行数
n1 = np.random.randint(0,10,size=(4,5))
n2 = np.random.randint(0,10,size=(5,4))
print(n1)
[[1 2 1 2 9]
[3 0 1 8 1]
[9 0 8 3 8]
[0 2 1 9 4]]
print(n2)
[[0 4 0 8]
[6 2 5 7]
[6 2 9 5]
[8 3 7 5]
[0 4 4 8]]
n = np.dot(n1,n2)
print(n)
[[ 34 52 69 109]
[ 70 42 69 77]
[ 72 93 125 191]
[ 90 49 98 96]]
广播机制
为不同维度的矩阵尽量提供运算可能性
规则一:为缺失的维度补维度
规则二:缺失元素用已有值填充
如:m = np.ones((2,3))
a = np.arange(3)
print(m)
print(a)
[[1. 1. 1.]
[1. 1. 1.]]
[0 1 2]
a,m数组在互相进行运算时,由于数组a维度缺失,因此numpy会将数组a的维度补 成与数组m相同的维度,且数组a补充的维度数据会尽量复制原维度的数据
因此:在计算时
x = m + a
print(x)
[[1. 2. 3.]
[1. 2. 3.]]