机器学习第一阶段:python数据分析和建模库(2)— 科学计算库Numpy

197 阅读6分钟

本文单纯作为视频学习笔记,非原创,原视频链接: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.]]

数据切分 1.jpg 2.jpg 3.jpg

  • print(np.hsplit(a,3)) = > 想要将a平均的切分成3份
  • print(np.hsplit(a,(3,4))) => 在no.3和no.4的位置各切了一刀

复制 4.jpg

  • b = a => 将a的内容赋值给b
  • a和b完全相等,改变a也会改变b

view()复制,不推荐使用 5.jpg

  • 变换了c,但a不会变
  • 变换c中的值,a中的值也会变化;因为view复制,浅复制,虽然所指内容不同,但所存数据相同,即共用相同的值

.copy() 6.jpg

  • d is a ,打印出来为False
  • d中值变化,a中值不变
  • 使一个变量成为另一个变量的初始值,两个变量之后的变化互不影响

argmax()函数 7.jpg

  • 在当前矩阵中,最大值或最小值的index值为多少,返回index值
  • axis=0 => 维度为0,即按列进行选择每一列最大的索引

tile()函数 8.jpg

  • 也相当于一个复制的操作
  • 将a复制成一个3x5的矩阵

** sort(),排序** 9.jpg 10.jpg

  • argsort(),相当于求索引值,按索引值进行排序

ps:(23条消息) Python之Numpy库常用函数大全(含注释)_TensorSense的博客-CSDN博客_numpy库 也可以看看