NumPy库的介绍与使用教程(二)

本教程是NumPy库的介绍与使用的第二部分。
第一部分请参考:
https://blog.csdn.net/qq_45152498/article/details/107051486?utm_source=app
在这里插入图片描述

NumPy数据存取与函数

1.数据的CSV文件存取

(1)CSV文件
CSV (Comma-Separated Value,逗号分隔值)
CSV是一种常见的文件格式,用来存储批量数据。
在这里插入图片描述 (2)如何将数组写入CSV文件?

np.savetxt(frame, array, fmt='%.18e', delimiter=None) #介绍部分参数
  • frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件。
  • array:存入文件的数组。
  • fmt:写入文件的格式,例如:%d、%.2f 、%.18e。
  • delimiter:分割字符串,默认是任何空格。

示例

import numpy as np

a = np.arange(18).reshape(2,9)

a
Out[4]: 
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8],
       [ 9, 10, 11, 12, 13, 14, 15, 16, 17]])

np.savetxt('a.csv', a, fmt='%d', delimiter=',') #将数组保存成CSV文件

fo = open('a.csv',"r") #打开a.csv文件

for line in fo:
    print(line) #在屏幕上显示文件内容
        
0,1,2,3,4,5,6,7,8
9,10,11,12,13,14,15,16,17

fo.close() #关闭文件

(3)如何读取CSV文件到数组?

np.loadtxt(frame, dtype=np.float, delimiter=None, unpack=FaIse) #介绍部分参数
  • frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件。
  • dtype:数据类型,可选。
  • delimiter:分割字符串,默认是任何空格。
  • unpack:如果True,读入属性将分别写入不同变量。

示例

b = np.loadtxt('a.csv', delimiter=',')

b
Out[18]: 
array([[ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.],
       [ 9., 10., 11., 12., 13., 14., 15., 16., 17.]])

b = np.loadtxt('a.csv', dtype=np.int, delimiter=',') #改变数据类型

b
Out[20]: 
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8],
       [ 9, 10, 11, 12, 13, 14, 15, 16, 17]])

c = np.loadtxt('a.csv', dtype=np.int, delimiter=',', unpack=True)

c
Out[32]: 
array([[ 0,  9],
       [ 1, 10],
       [ 2, 11],
       [ 3, 12],
       [ 4, 13],
       [ 5, 14],
       [ 6, 15],
       [ 7, 16],
       [ 8, 17]])

q,w,e,r,t,y,u,i,o = np.loadtxt('a.csv', dtype=np.int, delimiter=',', unpack=True) #读入到不同数组

q
Out[34]: array([0, 9])

o
Out[35]: array([ 8, 17])

(4)CSV文件的局限性
       CSV只能有效存储一维和二维数组,也就是说np.savetxt()和np.loadtxt()只能有效存取一维和二维数组。

2.多维数据的存取

(1)任意维度数据存取

a.tofile(frame, sep=", format='%s')
  • frame:文件、字符串。
  • sep:数据分割字符串,如果是空串,写入文件为二进制。
  • format:写入数据的格式。

示例

a = np.arange(24).reshape(2,3,4)

a
Out[36]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

a.tofile("b.dat", sep=',', format='%d')

f = open("b.dat", 'r')

for line in f:
    print(line) #显示文件内容
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23

f.close()

(2)读取文件还原数据

np.fromfile(frame, dtype=float, count=-1, sep=")
  • frame:文件、字符串。

  • dtype:读取的数据类型。

  • count:读入元素个数,-1表示读入整个文件。

  • sep:数据分割字符串,如果是空串,写入文件为二进制。

读取文本文件

a = np.arange(24).reshape(2,3,4)

a.tofile("b.dat", sep=',', format='%d') #生成文本文件,维度信息丢失

c = np.fromfile("b.dat", dtype=np.int, sep=',')

c
Out[22]: 
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  10,  11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23])

c = np.fromfile("b.dat", dtype=np.int, sep=',').reshape(2,3,4) #变换数组维度

c
Out[24]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

读取二进制文件

a = np.arange(24).reshape(2,3,4)

a.tofile("b.dat", format='%d') #生成二进制文件,维度信息丢失

c = np.fromfile("b.dat", dtype=np.int)

c
Out[33]: 
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  10,  11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23])

c = np.fromfile("b.dat", dtype=np.int).reshape(2,3,4) #变换数组维度

c
Out[37]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

注意:
       ①该方法读取时需要知道存入文件时数组的维度元素类型;②a.tofile()和np.fromfile()可以配合使用达到数据缓存的目的;③可以通过元数据文件来存储额外信息。
(3)NumPy的便捷文件存取

np.save(fname, array) 或 np.savez(fname, array)
  • fname:文件名,以.npy为扩展名,压缩扩展名为.npz
  • array:数组变量
np.load(fname)

fname:文件名,以.npy为扩展名,压缩扩展名为.npz
示例

import numpy as np

a = np.arange(24).reshape(2,3,4)

np.save("a.npy",a) #这个文件需要打开电脑的隐藏项目才可以看到

b = np.load("a.npy")

b
Out[5]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])
3.NumPy的随机数函数

NumPy的random子库

np.random.*

np.random的随机数函数(1)
在这里插入图片描述

import numpy as np

a = np.random.rand(2,3,4)

a
Out[3]: 
array([[[0.36471364, 0.34718866, 0.36064756, 0.78410878],
        [0.12830901, 0.83901722, 0.34417573, 0.51421197],
        [0.58124066, 0.99361486, 0.53174879, 0.5647538 ]],

       [[0.08715647, 0.31419565, 0.43201921, 0.29539433],
        [0.83393732, 0.53002474, 0.11969182, 0.32529073],
        [0.47897925, 0.48837353, 0.05193301, 0.08979494]]])

sn = np.random.randn(2,3,4)

sn
Out[5]: 
array([[[ 1.18758174, -1.20623701, -0.33194348,  1.10717503],
        [ 0.55046098, -0.37949067, -0.39361895,  1.61583474],
        [ 0.08805425,  0.08435202, -0.04118038, -0.71567655]],

       [[ 1.92751269,  0.5885066 , -0.48169842,  2.16505115],
        [ 0.19945011,  0.13902858,  1.42570701, -0.26348193],
        [-0.86675236,  1.19701332,  0.28535783,  1.75732157]]])
        
b = np.random.randint(100,200,(3,4))

b
Out[7]: 
array([[192, 102, 187, 102],
       [164, 148, 195, 132],
       [112, 117, 199, 155]])
       
np.random.seed(10) #更改随机数种子

np.random.randint(100,200,(3,4))
Out[10]: 
array([[109, 115, 164, 128],
       [189, 193, 129, 108],
       [173, 100, 140, 136]])

np.random.seed(10) #种子不变,数组不变

np.random.randint(100,200,(3,4))
Out[12]: 
array([[109, 115, 164, 128],
       [189, 193, 129, 108],
       [173, 100, 140, 136]])

np.random的随机数函数(2)
在这里插入图片描述

a = np.random.randint(100,200,(3,4))

a
Out[15]: 
array([[116, 111, 154, 188],
       [162, 133, 172, 178],
       [149, 151, 154, 177]])

np.random.shuffle(a)

a #a发生了变化
Out[17]: 
array([[116, 111, 154, 188],
       [149, 151, 154, 177],
       [162, 133, 172, 178]])
       
a = np.random.randint(100,200,(3,4))

a
Out[23]: 
array([[177, 122, 123, 194],
       [111, 128, 174, 188],
       [109, 115, 118, 180]])

np.random.permutation(a)
Out[25]: 
array([[109, 115, 118, 180],
       [111, 128, 174, 188],
       [177, 122, 123, 194]])

a #a没有变化
Out[26]: 
array([[177, 122, 123, 194],
       [111, 128, 174, 188],
       [109, 115, 118, 180]])
       
b = np.random.randint(100,200,8)

b
Out[28]: array([117, 146, 107, 175, 128, 133, 184, 196])

np.random.choice(b,(3,2)) #可以重复选取元素
Out[29]: 
array([[117, 128],
       [133, 128],
       [196, 117]])

np.random.choice(b,(3,2),replace=False) #不可以重复选取元素
Out[30]: 
array([[133, 175],
       [146, 196],
       [184, 128]])

np.random.choice(b,(3,2),p=b/np.sum(b)) #设定数值大的出现概率大
Out[32]: 
array([[196, 107],
       [146, 196],
       [133, 133]])

np.random的随机数函数(3)
在这里插入图片描述

u = np.random.uniform(0,10,(3,4))

u
Out[34]: 
array([[4.36353698, 3.56250327, 5.87130925, 1.49471337],
       [1.71238598, 3.97164523, 6.37951564, 3.72519952],
       [0.02406761, 5.48816356, 1.26971841, 0.79792681]])

n = np.random.normal(10,5,(3,4))

n
Out[36]: 
array([[13.57941572,  4.07115727,  6.81836048,  6.94593078],
       [ 3.40304302,  7.19135792, 11.02692287,  5.23319662],
       [11.60758976,  2.39530663, -0.80726459, 11.72656647]])

m = np.random.poisson(0.3,(3,4))

m
Out[38]: 
array([[0, 1, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 1, 0]])
4.NumPy的统计函数

NumPy直接提供的统计类函数

np.*

NumPy的统计函数(1)
在这里插入图片描述

import numpy as np

a = np.arange(15).reshape(3,5)

a
Out[3]: 
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

np.sum(a)
Out[4]: 105

np.mean(a,axis=1) #内层元素
Out[5]: array([ 2.,  7., 12.])

np.mean(a,axis=0) #最外层元素
Out[6]: array([5., 6., 7., 8., 9.])

np.average(a,axis=0,weights=[10,5,1])
Out[8]: array([2.1875, 3.1875, 4.1875, 5.1875, 6.1875])

np.std(a)
Out[9]: 4.320493798938574

np.var(a)
Out[10]: 18.666666666666668

NumPy的统计函数(2)
在这里插入图片描述

b = np.arange(15,0,-1).reshape(3,5)

b
Out[12]: 
array([[15, 14, 13, 12, 11],
       [10,  9,  8,  7,  6],
       [ 5,  4,  3,  2,  1]])

np.max(b)
Out[13]: 15

np.argmax(b) #扁平化(变成一维)后的下标
Out[14]: 0

np.unravel_index(np.argmax(b),b.shape) #重塑成多维下标
Out[15]: (0, 0)

np.ptp(b)
Out[16]: 14

np.median(b)
Out[17]: 8.0
5.NumPy的梯度函数

在这里插入图片描述
梯度:连续值之间的变化率,即斜率。
XY坐标轴连续三个x坐标对应的Y轴值:a,b,c
其中,b的梯度是: (c-a)/2

a = np.random.randint(0,20,5)

a
Out[19]: array([13, 18, 17, 12,  6])

np.gradient(a)
Out[20]: array([ 5. ,  2. , -3. , -5.5, -6. ])
#2=(17-13)/2  -6=(6-12)/1
b = np.random.randint(0,50,(3,5))

b
Out[22]: 
array([[47, 19, 21,  7,  0],
       [11, 23,  8, 17, 28],
       [ 0, 25, 33, 16, 26]])

np.gradient(b)
Out[23]: 
[array([[-36. ,   4. , -13. ,  10. ,  28. ],
        [-23.5,   3. ,   6. ,   4.5,  13. ],
        [-11. ,   2. ,  25. ,  -1. ,  -2. ]]), #最外层维度的梯度
 array([[-28. , -13. ,  -6. , -10.5,  -7. ],
        [ 12. ,  -1.5,  -3. ,  10. ,  11. ],
        [ 25. ,  16.5,  -4.5,  -3.5,  10. ]])] #第二层维度的梯度

本文内容参考:
中国大学慕课北京理工大学嵩天老师所讲的Python数据分析与展示

如有错误或者不足之处,欢迎大家留言指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

☆下山☆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值