「Python」Numpy初识
本文的目录👇:
- 创建数组
- arange创建,array合并
- 数组的基本运算
+ - * / % .T linalg.lnv
- 数组的切片与索引
a[m,:n]
- 数组的堆叠
- 改变数组形状
- reshape()
- ravel(拉直)
- flatten(拉直)
- shape(改变形状)
- transpose(转置)
- 数组堆叠
- hstack(水平叠加)
- vstack(垂直叠加)
- dstack(深度叠加)
- numpy的拆分
- hsplit(横向拆分)
- vsplit(纵向拆分)
- dsplit(深度拆分)
- 文件操作
- npy & npz
- np.loadtxt
创建数组
arange创建,array合并
参数个数情况: np.arange()函数分为一个参数,两个参数,三个参数三种情况
1)一个参数时,参数值为终点,起点取默认值0,步长取默认值1。
2)两个参数时,第一个参数为起点,第二个参数为终点,步长取默认值1。
3)三个参数时,第一个参数为起点,第二个参数为终点,第三个参数为步长。其中步长支持小数
pip install numpy # 安装模块
import numpy as np a = np.arange(5) # 创建一维数组 ''' >>> print(a) [0 1 2 3 4] '''' b = np.array([np.arange(6),np.arange(6)]) # 一个2 × 6 的二维数组 ''' 创建两个1×6的数组,然后用array方法将两个数组合成一个2×6的数组 [[0 1 2 3 4 5] [0 1 2 3 4 5]] ''' m = 4 # 行 n = 6 # 列 x = [y for y in range(n)] # 列 c = np.array([x]*m) ''' >>> print(x) [0, 1, 2, 3, 4, 5] >>> print(c) 创建一个m*n的矩阵 [[0 1 2 3 4 5] [0 1 2 3 4 5] [0 1 2 3 4 5] [0 1 2 3 4 5]] '''
数组的基本运算
+ - * / % .T linalg.lnv
np.add(a,b) or a + b # 加法 np.subtraction(a,b) or a - b # 减法 np.multiply(a,b) or a * b # 乘法(X乘) np.add(a,b) # 点乘 np.divide(a,b) or a / b # 除法 # 向量与标量之间 a = np.array([1,2,3],[4,5,6]) a + 1 a - 1 a * 2 a / 2 a % 2 # 求余 [[1,0,1],[0,1,0]] a.T # 转置 [[1,4],[2,5],[3,6]] import numpy.linalg as lg lg.lnv(a) # 矩阵的逆 (矩阵的逆的充要条件是矩阵满秩)
数组的切片与索引
a[m,:n]
与python的数组切片一样(了解的可以跳过了...)
数组的索引均从0开始
a = np.arange(9) # a = [0,...,8] a[3:7] # [3,4,5,6] a[:7:2] # [0,2,4,6] 下标从 0 - 7 ,且下标每次递增2 a[::-1] # [8,7,6,5,4,3,2,1,0] 反转数组 # 二维数组 a = np.array([[1,2,3],[4,3,2]]) a[1][0] # [4] 第1行第0列 这里的数组行和列的索引均是从0开始 a[1,:2] # [4, 3] 第1行的前两个元素 :2 指的是索引0和1,即前两个
数组的堆叠
改变数组形状
reshape()
b = np.arange(24).reshape(2,3,4) ''' [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] '''
ravel(拉直) , flatten(拉直),shape(改变形状),transpose(转置)
b.ravel() # 拆解,将多多维数组变为一维, 只改变看到的 ''' [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23] ''' b.flattern() # 拉直,function与ravel相同,但是flatten返回的是真实的数组,需要分配新的内存空间 b.shape(6,4) # 使用元组改变数组形状, 变为6行4列 b.transpose() # 转置 ''' [[ 0, 4, 8, 12, 16, 20], [ 1, 5, 9, 13, 17, 21], [ 2, 6, 10, 14, 18, 22], [ 3, 7, 11, 15, 19, 23]] '''
数组堆叠
hstack(水平叠加),vstack(垂直叠加),dstack(深度叠加)
a = [[0, 1, 2], b = [[0, 2, 4], [3, 4, 5], [6, 8, 10], [6, 7, 8]] [12, 14, 16] np.hstack((a,b)) # 注意有两层括号 ''' [[ 0, 1, 2, 0, 2, 4], [ 3, 4, 5, 6, 8, 10], [ 6, 7, 8, 12, 14, 16]] ''' np.vstack((a,b)) ''' [[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 0, 2, 4], [ 6, 8, 10], [12, 14, 16]] ''' np.dstack((a,b)) Out: array([[[ 0, 0], [ 1, 2], [ 2, 4]], [[ 3, 6], [ 4, 8], [ 5, 10]], [[ 6, 12], [ 7, 14], [ 8, 16]]])
numpy的拆分
hsplit(横向拆分),vsplit(纵向拆分),dsplit(深度拆分)
a = [[0, 1, 2], [3, 4, 5], [6, 7, 8]] np.hsplit(a,3) Out:[array([[0],[3], [6]]), . array([[1], [4],[7]]), array([[2],[5], [8]])] np.vsplit(a,3) Out: [array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])] c= np.arange(27).reshape(3,3,3) np.dsplit(c,3) Out:[array([[[ 0], [ 3], [ 6]], [[ 9], [12], [15]], [[18], [21], [24]]]), array([[[ 1], [ 4], [ 7]], [[10], [13], [16]], [[19], [22], [25]]]), array([[[ 2], [ 5], [ 8]], [[11], [14], [17]], [[20], [23], [26]]])]
文件操作
npy & npz
np.load和np.save是读写磁盘数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中。
np.save(filename,arr)
将数组保存为.npy
文件
np.load()
加载文件 可自动识别.npy
或者.npz
文件
np.savez(filename, *arg, **kwds)
将多个数组保存在一个文件中。
第一个参数是文件名,其后的参数都是需要保存的数组,也可以使用关键字参数为数组起一个名字,非关键字参数传递的数组会自动起名为arr_0, arr_1, …。
np.savez(f'./dataset/train/{i}.npz',signal=signal,label=label) # 等号前面的signal的是数组的名称,方便后续读取的时候以字典的形式读出来,等号后面的singal才是真正的数组 t = np.load('xxx') print(t['signal'])
此时load函数自动识别npz文件,并且返回一个类似于字典的对象,可以通过数组名作为关键字获取数组的内容。
savez函数输出的是一个压缩文件(扩展名为npz),其中每个文件都是一个save函数保存的npy文件,文件名对应于数组名。
r = np.load(r'C:\python数据分析\arraytest1.npz') print(r) print(r['arr_0'])
np.loadtxt
np.loadtxt
和np.savetxt
可以读写1维和2维数组的文本文件: 同时可以指定各种分隔符、针对特定列的转换器函数、需要跳过的行数等。
—— 注意:只能处理 1维和2维数组。可以用于CSV格式文本文件
import numpy as np a = np.loadtxt('./dataset/train_signal/1.txt',delimiter='\n') print(a) # type(a) -> np.array print(a.dtype) # float ''' [-37. -18. -0.99999988 ... 53. 24. 14. ] '''
#.csv格式 ar1 = np.random.rand(2,3) np.savetxt(r'C:\arraytest2.csv',ar1,delimiter=',')#csv一定时逗号分隔符