NumPy(by千锋教育)
介绍
numpy( numerical Python)可以存储和处理大型矩阵。
numpy的导入
import numpy as np
import pandas as pd
import matplotlib.pyplot as pltcat = plt.imread('share_6794792b60e2c4923d44e11aed27e55a-01.jpeg') # 读取图片数据
print('cat:', cat, '\n') # 图片由数字组成,三维数组(0-255--->>rgb)
print('type(cat):', type(cat), '\n') # nd-->>多维 array-->>数组
print('cat.shape:', cat.shape, '\n') # 查看维度,三个数字代表三个维度,421行,725列,3代表RGB颜色的数值# 显示图片
plt.imshow(cat) # 三维彩色,二维黑白
plt.show()
# 视频:四维数据(x,421,725,3), x:帧数
numpy的数组创建
-
使用np.array()创建
注意:
numpy默认ndarray的所有元素的类型是相同的
如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int
ndarray的常见数据类型:int:int8、uint8、int16、int32、int64
float: float16、float32、float64
str:字符串 -
使用np.ones(shape,dtype=None,order=‘C’)
所有元素都为1
shap:形状
dtype:元素类型
order:{‘C’, ‘F’},可选,默认值:C是否在内存中以行主(C-风格)或列主(Fortran-风格)顺序存储多维数据,一般默认就行n = np.ones(shape=(3, 4), dtype=np.int16)
-
使用np.zeros(shape, dtype=float)
所有元素都为0
shap:形状
dtype:元素类型n = np.zeros(shape=(3, 4), dtype=np.int16)
-
使用np.full(shape,fill_value, dtype=float, order=‘C’)
所有元素都为填充值
shape:形状
dtype:None: 元素类型
fill_value: 填充值
order:{‘C’, ‘F’},可选,默认值:C是否在内存中以行主(C-风格)或列主(Fortran-风格)顺序存储多维数据,一般默认就行n = np.full(shape=(3, 4), fill_value=8, dtype=np.int16)
-
使用np.eye(N, M=None, k=0, dtype=float)
对角线为1,其他位置为0
N:行
M:列数,默认为None,表示行列一样
k: 向右偏移0个位置,负数为向左偏移
dtype:None: 元素类型n = np.eye(3, 4, k=1, dtype=np.int8)
-
使用np.linspace(start, stop, num=50, endpoint=Ture, restep=Flase, dtype=None)
等差数列
start:开始
stop:结束
num:等差数列中有多少个数字,默认50
endpoint: 是否包含结束值
restep:是否返回等差值(步长)
dtype:None: 元素类型n = np.linspace(0, 100, num=51, retstep=True, dtype=np.int8)
-
使用np.arange(start, stop, step, dtype=None)
创建一个数值范围的数组,和range功能类似, [start,stop)
start:开始
stop:结束
step:步长
dtype:None: 元素类型n1 = np.arange(10) # 0-9 n2 = np.arange(2, 10, 2) # 2,4,6,8
-
使用np.random.randint(low, high=None, size=None, dtype=None)
创建一个随机整数数组
low:最小值
high=None:最大值
high=None时, 生成的数据在[0,low)区间内
如果使用high,生成的数据在[low,high)区间内
size=None:数组形状,默认只输出一个随机值
dtype:None: 元素类型n1 = np.random.randint(10) # 0-9中随机一个数字 n2 = np.random.randint(3, 10, size=(3, 4)) # 二维数组 n3 = np.random.randint(0, 256, size=(20, 40, 3)) # 三维数组 plt.imshow(n3) plt.show()
-
使用np.random.randn(d0,d1,…,dn)
服从一个标准正态分布的多维数组,0是均值,1是标准差的正态分布
dn:第n个维度的数值
n2 = np.random.randn(10)
-
使用np.random.random(size=None)
[0,1)的随机数的多维数组
size=None:数组形状
n1 = np.random.random() # 产生一个数 n2 = np.random.random(size=(3, 4))
-
使用np.random.rand(d0,d1,…,dn)
[0,1)的随机数的多维数组,与np.random.random功能类似
dn:n个维度
n1 = np.random.rand() # 产生一个数 n2 = np.random.rand(3, 4)
numpy的常用属性
1 | ndim | 维度,3代表三维 |
---|---|---|
2 | shape | 形状(各维度的长度),有三个数字代表三维 |
3 | size | 915675,总的数据量,总的个数 |
4 | dtype | 类型,unit8 |
import numpy as np
import pandas as pd
import matplotlib.pyplot as pltcat = plt.imread('cat.jpg')print('cat.ndim:', cat.ndim, '\n') # 维度,3代表三维
print('cat.shape:', cat.shape, '\n') # 形状(各维度的长度),有三个数字代表三维
print('cat.size:', cat.size, '\n') # 915675,总的数据量,总的个数
print('cat.dtype:', cat.dtype, '\n') # 类型,unit8
numpy的索引和切片
numpy的索引
一维:
n[0] | 第一个 |
---|---|
n[-1] | 最后一个 |
二维
n1 [3] [4] / n1[3, 4] | 第四行,第五列 |
---|---|
n1 [-1] [-1] | 最后一行,最后一列 |
三维
n2 [1] [2] [-1] n2 [1, 2, -1] | 剥洋葱 |
---|---|
n2[1, 2, -1] = 886 | 改变指定数字 |
n2[1, 2] = 100 |
mport numpy as np
import pandas as pd
import matplotlib.pyplot as plt'''1.一维
'''
l = [1, 2, 3, 4]
print('l[0]:', l[0], '\n')
n = np.array(l)
print('n[0]:', n[0], '\n')
print('n[-1]:', n[-1], '\n') # 一维和列表差不多'''2.二维
'''
n1 = np.random.randint(0, 10, size=(4, 5))
print('n1:', n1, '\n')
# 找到最后一个数字’
print('n1[3][4]:', n1[3][4], '\n') # 和下边一样的
print('n1[-1][-1]:', n1[-1][-1], '\n') # 先行后列
print('n1[3, 4]:', n1[3, 4], '\n') # 和上边一样的'''3.三维
'''
n2 = np.random.randint(0, 100, size=(4, 5, 6))
print('n2:', n2, '\n')
#
print('n2[1][2][-1]:', n2[1][2][-1], '\n') # 三个数字按照上边的三个维度的顺序来
print('n2[1, 2, -1]:', n2[1, 2, -1], '\n')n2[1, 2, -1] = 886 # 改变指定数据
print('n2:', n2, '\n')n2[1, 2] = 100 # 也可以一个一个指定[1,2,3,4,5,6]
print('n2:', n2, '\n')
numpy的切片
一维
n[2:6] | |
---|---|
n[::-1] | 翻转 |
二维
看行列
n1[0] | 第一行 |
---|---|
n1[1:4] | 二到四行 |
n1[[1, 2, 4]] | 不连续的三行 |
n1[:,0] | 第一列 |
n1[:,1:4] | 二到四列 |
n1[:, [1, 2, 4]] | 不连续的三列 |
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
'''1.一维
'''
# 一维与列表完全一致
l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print('l[2:6]:', l[2:6], '\n') # [3, 4, 5, 6]
print('l[::-1]:', l[::-1], '\n') # 列表翻转,[9, 8, 7, 6, 5, 4, 3, 2, 1]n = np.array(l)
print('n:', n, '\n')
print('n[2:6]:', n[2:6], '\n') # [3, 4, 5, 6]
print('n[::-1]:', n[::-1], '\n') # 列表翻转,[9, 8, 7, 6, 5, 4, 3, 2, 1]'''2.二维
'''
n1 = np.random.randint(0, 10, size=(6, 8))
print('n1:', n1, '\n')
# 行
print('n1[0]:', n1[0], '\n') # 取第一行
print('n1[1:4]:', n1[1:4], '\n') # 取二到四行
print('n1[[1, 2, 4]]:\n', n1[[1, 2, 4]], '\n') # 取不连续的三行,也可以重复取
# 列
n2 = np.random.randint(0, 10, size=(6, 8))
print('n2:', n2, '\n')
print('n1[:,0]:', n1[:, 0], '\n') # 取第一列
print('n1[:,1:4]:', n1[:, 1:4], '\n') # 取二到四列
print('n1[:, [1, 2, 4]]:\n', n1[:, [1, 2, 4]], '\n') # 取不连续的三列,也可以重复取
题外话
已经大三了,感觉第一次过1024节
现在任然很迷茫
少的不说,多的不辣
加油吧
每天都要笑哦