这个专栏名为《Numpy从入门到精通》,顾名思义,是记录自己学习numpy的学习过程,也方便自己之后复盘!为深度学习的进一步学习奠定基础!希望能给大家带来帮助,爱睡觉的咋祝您生活愉快! 这一篇介绍《Numpy从入门到精通——存读矩阵以及读取矩阵中的数据》
文章目录
- 一、利用savetxt、loadtxt存读矩阵
- 二、读取维度为1的矩阵数据
- 2.1 获取指定位置的数据
- 2.2截取一段数据
- 2.3间隔取数据
- 2.4倒序取数
- 三、读取多维矩阵数据
- 3.1截取一个多维数组的一个区域内数据
- 3.2截取一个多维数组中,数值在一个值域之内的数据
- 3.3指定的行截取多维数组
- 3.4指定的列截取多维数组
- 四、choice函数抽取数据
一、利用savetxt、loadtxt存读矩阵
在np中也提供了能直接将矩阵存储成txt文件的函数,以及将txt文件读取成为矩阵的函数loadtxt,下面我们将详细介绍这两个函数:
函数 | 说明 |
---|---|
savetxt | 将np.ndarray存储在txt文件中 |
loadtxt | txt文件中的矩阵读取到np.ndarray中 |
通过savetxt存储矩阵,通过loadtxt读取矩阵:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project :numpy学习
@File :task_8.py
@IDE :PyCharm
@Author :咋
@Date :2023/4/17 16:45
"""
import numpy as np
array_1 = np.random.random([5,5]) # 创建一个5x5的矩阵
print(array_1)
# 保存矩阵
np.savetxt(X=array_1,fname="test.txt")
array_2= np.loadtxt("test.txt")
print(array_2)
输出为:
[[0.55288088 0.77184344 0.8309328 0.55396012 0.62182447]
[0.76018218 0.75927817 0.6210175 0.35243527 0.23502823]
[0.80056504 0.33167949 0.21276266 0.28230738 0.93320109]
[0.28639089 0.78890919 0.42325923 0.3815833 0.71751376]
[0.72839721 0.45384038 0.4945789 0.36863601 0.21875081]]
[[0.55288088 0.77184344 0.8309328 0.55396012 0.62182447]
[0.76018218 0.75927817 0.6210175 0.35243527 0.23502823]
[0.80056504 0.33167949 0.21276266 0.28230738 0.93320109]
[0.28639089 0.78890919 0.42325923 0.3815833 0.71751376]
[0.72839721 0.45384038 0.4945789 0.36863601 0.21875081]]
txt中的文件为:
可以看到np能够成功将矩阵存储到txt文件中,也能够将txt中的文件读取到程序中。
二、读取维度为1的矩阵数据
在上一篇中,我们主要介绍了np生成矩阵,当生成了矩阵之后,我们应该怎么去读取我们需要的数据呢?接下来通过一段代码介绍一下几种常用的获取ndarray中的数据的方法:
创建一个维度为1的矩阵,用于后面的实验:
@Project :numpy学习
@File :task_9.py
@IDE :PyCharm
@Author :咋
@Date :2023/4/17 17:04
"""
import numpy as np
np.random.seed(2023)
array_1 = np.random.random([10])
print(array_1)
输出:
[0.3219883 0.89042245 0.58805226 0.12659609 0.14134122 0.46789559
0.02208966 0.72727471 0.52438734 0.54493524]
2.1 获取指定位置的数据
#获取指定位置的数据,获取第4个元素
print(array_1[3])
输出:
0.12659609350429124
2.2截取一段数据
print(array_1[3:6])
输出:
[0.12659609 0.14134122 0.46789559]
2.3间隔取数据
#截取固定间隔数据
print(array_1[1:6:2])
输出:
[0.89042245 0.12659609 0.46789559]
2.4倒序取数
#倒序取数
print(array_1[::-2])
输出:
[0.54493524 0.72727471 0.46789559 0.12659609 0.89042245]
三、读取多维矩阵数据
我们以维度为2的矩阵举例,其他高维矩阵也是类似的,首先创建一个维度为2的矩阵用以后面的实验:
array_2=np.arange(25).reshape([5, 5])
print(array_2)
输出:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]]
3.1截取一个多维数组的一个区域内数据
print(array_2[1:3, 1:3])
输出:
[[ 6 7]
[11 12]]
3.2截取一个多维数组中,数值在一个值域之内的数据
print(array_2[(array_2 > 3) & (array_2 < 10)])
输出:
[4 5 6 7 8 9]
3.3指定的行截取多维数组
print(array_2[[1, 2]])
输出:
[[ 5 6 7 8 9]
[10 11 12 13 14]]
3.4指定的列截取多维数组
print(array_2[:, 1:3])
输出:
[[ 1 2]
[ 6 7]
[11 12]
[16 17]
[21 22]]
这个索引与python里面的range所有非常相似,由start,end和step组成,注意end不包括。
四、choice函数抽取数据
除了用上述办法通过索引来提取元素,我们还可以通过choice函数来从目标矩阵中随机提取数据:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project :numpy学习
@File :task_10.py
@IDE :PyCharm
@Author :咋
@Date :2023/4/17 17:29
"""
import numpy as np
from numpy import random as nr
a = np.arange(1, 25, dtype=float)
c1 = nr.choice(a, size=(3, 4)) # size指定输出数组形状
c2 = nr.choice(a, size=(3, 4), replace=False) # replace默认为True,即可重复抽取。
# 下式中参数p指定每个元素对应的抽取概率,默认为每个元素被抽取的概率相同。
c3 = nr.choice(a, size=(3, 4), p=a / np.sum(a))
print("随机可重复抽取")
print(c1)
print("随机但不重复抽取")
print(c2)
print("随机但按制度概率抽取")
print(c3)
输出:
D:\anaconda\python.exe D:/桌面/numpy学习/task_10.py
300.0
随机可重复抽取
[[14. 22. 20. 11.]
[ 6. 18. 15. 21.]
[ 3. 19. 23. 3.]]
随机但不重复抽取
[[ 6. 17. 13. 24.]
[ 5. 20. 19. 12.]
[10. 2. 21. 23.]]
随机但按制度概率抽取
[[19. 18. 24. 11.]
[ 5. 7. 11. 20.]
[10. 15. 16. 20.]]
前两个都好解释,size是抽取的矩阵大小,replace是能不能重复抽取,我们重点说一下参数p,也就是抽取的概率。这里 p=a / np.sum(a),也就是数值越大,抽到的概率越高。