持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天, 点击查看活动详情
本文的目录👇:
- 创建数组
- 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一定时逗号分隔符
本次的总结暂且到这了,之后再更新⛷️