本文单纯作为视频学习笔记,非原创,原视频链接:www.bilibili.com/video/BV1Ps…
1.数据结构
通常情况下,数据构成=行+列,所以一般是对矩阵进行操作,可以用numpy来操作
要使用numpy,用import导入即可
1.1 numpy的核心操作
1)可以打开 .txt 文件
import numpy ##使用numpy时要导入numpy的包
world_alcohol = numpy.genfromtxt("world_alcohol.txt",delimiter=",",dtype=str)
print(type(world_alcohol))
print(world_alcohol)
print(help(numpy.genfromtxt)) ##学习新函数时,最好用help查看一下文档,就可以知道咋用了
//genfromtxt()函数详细:详细介绍 Numpy 中 genfromtxt 函数用法 - zeroing1 - 博客园 (cnblogs.com)
2)矩阵操作
numpy的核心结构:array数组结构
import numpy
## 把输入的list转化为numpy.array()的格式,变成一个一维向量
vector = numpy.array([5,10,15,20]) ##通过numpy造出核心结构array数组
matrix = numpy.array([[5.10.15],[20,25,30][35,40,45])
print(vector)
print(matrix)
输出结果:
[ 5 10 15 20] ##一个行向量
[ [ 5 10 15]
[20 25 30]
[35 40 45] ]##一个矩阵
3)属性
创建完矩阵后,可以调用不同的属性进行不同的操作
- shape属性:可以计算数组中有多少个元素
vector = numpy.array([1,2,3,4])
print(vector.shape)##vector只有4个元素
matrix = numpy.array([[5,10,15],[20,25,30])
print(matrix.shape)##matrix是二维,是2行3列的矩阵
输出结果:
(4,)
(2,3)
- array()中,结构要求统一,numpy会自动转换
import numpy
numbers = numpy.array([1,2,3,4])
print(numbers)
numbers.dtype
numbers2 = numpy.array([1,2,3,4.0])
print(numbers2)
numbers2.dtype ##dtype也是numpy的属性之一,可以看出当前矩阵的数据类型
输出结果:
[1 2 3 4]
dtype('int32')
[1. 2. 3. 4. ]
dtype('float64')
- 运用索引,取出矩阵中所需要的值
vector = numpy.array([15,20,25,30],[5,10,15,20])
print(vector[0,3]) ##取第0行第3列的数
vector1 = numpy.array([5,10,15,20])
print(vector1[0:3]) ##取前三个值,从0开始到3,包括0,不包括3
##对于矩阵同样适用
matrix = numpy.array([
[5,10,15].
[20,25,30],
[35,40,45]
])
print(matrix[:,1]) ##打印当前所有样本的第1列;用 :进行占位,代表取所有
matrix1 = numpy.array([
[5,10,15],
[20,25,30],
[35,40,45]
])
print(matrix1[:,0:2]) ##打印当前所有样本的第0、1列;
matrix2 = numpy.array([
[5,10,15],
[20,25,30],
[35,40,45]
])
print(matrix2[1:3,0:2]) ##取1、2行的第0、1列;
输出结果:
25
[5 10 15]
[10 25 40]
[[5 10]
[20 25]
[35 40]]
[[20 25]
[35 40]]
- 判断array中的元素
import numpy
vector = numpy.array([5,10,15,20])
vector == 10
matrix = numpy.array([
[5,10,15],
[20,25,30],
[35,40,45]
])
matrix == 25
输出结果:
array([False, True ,False,False],dtype=bool)
array([[False,False,False],
[False, True ,False],
[False,False,False]],dtype=bool)
可以将false和true当作索引值,再传入array
vector = numpy.array([5,10,15,20])
equal_to_ten = (vector == 10)
print equal_to_ten
print (vector[equal_to_ten])
输出结果:
[False True False False]
[10]
" | "和 " & "符号
vector = numpy.array([5,10,15,20])
equal_to_ten_or_five = (vector == 10)|(vector == 5)##或符号
print equal_to_ten_or_five
vector1 = numpy.array([5,10,15,20])
equal_to_ten_or_five_1 = (vector == 10)&(vector == 5)##与符号
print equal_to_ten_or_five_1
输出结果:
[True True False False]
[False False False False]
2.基本操作
2.1 numpy中类型转换
-
string转换为float
vector = numpy.array(["1","2","3"])
print vector.dtype
print vector
vector = vector.astype(float) ##通过astype来转换
print vector.dtype
print vector
输出:
S1
['1','2','3']
float64
[1. 2. 3.]
2.2 一些函数
- 最小值
vector = numpy.array([5,10,15,20])
vector.min()
结果:
5
- 求和
matrix = numpy.array([
[5,10,15],
[20,25,30],
[35,40,45]
])
matrix.sum(axis=1) ##按行求和
matrix.sum(axis=0) ##按列求和
结果:
array([30,75,120])
array([65,75,90])
- arange函数、reshape函数
import numpy as np ##用np代表numpy
print(np.arange(15))
a = np.arange(15).reshape(3,5) ##reshape形成3行5列的矩阵
a
a.shape ##最常用,可用来检查bug
a.ndim ##维度为2,二维矩阵
a.dtype.name ##类型
a.size ##元素数量
结果:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
array([[ 0,1,2,3,4 ],
[ 5,6,7,8,9 ],
[ 10,11,12,13,14 ]])
(3,5)
2
'int32'
15
2.3 矩阵初始化
np.zeros((3.4)) ##默认为float类型的数值
##zeros => 零矩阵;记得+括号
结果:
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
指定数据类型
np.ones( (2,3,4),dtype=np.int32 ) ##指定类型
结果:
array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]]])
arange(),三个参数
np.arange( 10,30,5 )
##第0个元素为10,前元素+5=后一个元素,直到最后一个元素小于30
结果:
array([10,15,20,25])
numpy随机模块(常用)
np.random.random((2,3)) ##构造随机初始化矩阵
linspace()
from numpy import pi
np.linspace( 0, 2*pi, 100 ) ##从0开始,找100个平均的值
2.4 numpy的计算
加减
a = np.array([20,30,40,50])
b = np.arange(4)
print (a)
print (b)
c = a - b
print (c)
c = c - 1 ##维度不同的计算,如“1”,即每个元素都进行减1的操作
print (c)
b**2
print (b**2)
print (a<35) ##每个元素都比较
结果:
[20 30 40 50]
[0 1 2 3]
[20 29 38 47]
[19 28 37 46]
[0 1 4 9]
[True True False False]
乘除
A = np.array( [[1,1],
[0,1]] )
B = np.array( [[2,0],
[3,4]] )
print(A)
print('-------')
print(B)
print('-------')
print(A*B) ##内积
print('-------')
print(A.dot(B)) ##矩阵操作,.dot()拿A和B进行矩阵操作
print('-------')
print(np.dot(A,B)) ##用numpy的矩阵操作对AB进行相乘
结果:
[[1 1]
[0 1]]
-------
[[2 0]
[3 4]]
-------
[[2 0]
[0 4]]
-------
[[5 4]
[3 4]]
-------
[[5 4]
[3 4]]
-------
2.5 常用函数
幂运算、开方
import numpy as np
B = np.arange(3)
print(B)
print(np.exp(B))
print(np.sqrt(B))
结果:
[0 1 2]
[1. 2.71828183 7.3890561 ]
[0. 1. 1.41421356]
floor()函数,向下取整
a = np.floor(10*np.random.random((3,4)))
print(a)
print('-------')
print(a.ravel()) ##拉长矩阵
print('-------')
a.shape = (6,2)
print('-------')
print(a.T) ##矩阵转置
结果:
[[6. 7. 2. 9.]
[6. 0. 5. 2.]
[9. 0. 9. 6.]]
-------
[6. 7. 2. 9. 6. 0. 5. 2. 9. 0. 9. 6.]
-------
[[6. 7.]
[2. 9.]
[6. 0.]
[5. 2.]
[9. 0.]
[9. 6.]]
-------
[[6. 2. 6. 5. 9. 9.]
[7. 9. 0. 2. 0. 6.]]
拼接矩阵
import numpy as np
a = np.floor(10*np.random.random((2,2)))
b = np.floor(10*np.random.random((2,2)))
print(a)
print('---')
print(b)
print('---')
print(np.vstack((a,b))) ##将ab矩阵按行拼接在一起
print('---')
print(np.hstack((a,b))) ##将ab矩阵按列拼接在一起
结果:
[[7. 1.]
[6. 3.]]
---
[[5. 1.]
[9. 9.]]
---
[[7. 1.]
[6. 3.]
[5. 1.]
[9. 9.]]
---
[[7. 1. 5. 1.]
[6. 3. 9. 9.]]
数据切分
- print(np.hsplit(a,3)) = > 想要将a平均的切分成3份
- print(np.hsplit(a,(3,4))) => 在no.3和no.4的位置各切了一刀
复制
- b = a => 将a的内容赋值给b
- a和b完全相等,改变a也会改变b
view()复制,不推荐使用
- 变换了c,但a不会变
- 变换c中的值,a中的值也会变化;因为view复制,浅复制,虽然所指内容不同,但所存数据相同,即共用相同的值
.copy()
- d is a ,打印出来为False
- d中值变化,a中值不变
- 使一个变量成为另一个变量的初始值,两个变量之后的变化互不影响
argmax()函数
- 在当前矩阵中,最大值或最小值的index值为多少,返回index值
- axis=0 => 维度为0,即按列进行选择每一列最大的索引
tile()函数
- 也相当于一个复制的操作
- 将a复制成一个3x5的矩阵
** sort(),排序**
- argsort(),相当于求索引值,按索引值进行排序
ps:(23条消息) Python之Numpy库常用函数大全(含注释)_TensorSense的博客-CSDN博客_numpy库 也可以看看