numpy常见用法总结

前言

NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库,主要用来处理数组和矩阵。NumPy调用了大量的用C语言编写的算法库,使得其可以直接操作内存,不必进行Python动态语言特性所含有的前期类型检查工作,从而大大提高了运算速度。

这篇文章介绍了numpy最常用的一些用法,敲一遍下面的代码就算入门了。

导入

impotrt numpy as np

向量矩阵

vector = np.array([5, 10, 15, 20])  # 一维向量

matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])  # 矩阵
print(matrix)
[[1 2 3]
 [4 5 6]
 [7 8 9]]
 
print(matrix.ndim) # 维度
2

print(matrix.shape) # 形状
(3, 3)

print(matrix.size) # 有多少元素
9

print(matrix.dtype)  # 向量中的数据类型
int32

切片

vector = np.array([5, 10, 15, 20])  # 一维向量
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])  # 矩阵

print(matrix[0,0])  # >> 5 

print(vector[0:3])  # >> [5 10 15]  0~3表示0 1 2

print(matrix[:,1])  # >> [3 5 8] 此处冒号代表所有行

print(matrix[:,0:2])  # >> [[1 2], [4 5], [7 8]]

判断操作

vector = np.array([5, 10, 15, 20])  # 一维向量
print(vector == 10)
([False, True, False, False])

数据类型转换

vector = np.array([1, 2, 3])  # 数据类型是
print(vector.dtype)
int32

vector = vector.astype(float)  # 类型转换
print(vector.dtype)
float64

最值

vector.min()  # 最大值

vector.max()  # 最小值

对整行、列操作

matrix.sum(axis = 1)  # 对行求和

matrix.sum(axis = 0)  # 对列求和

range

range(stop) #或下面的
range(start, stop[, step]) #返回list对象,只能有整数
range(0, 5) 即从05,但不包括5,即0 1 2 3 4
range(0, 10, 2) 即从010,但不包括10,步幅为2,
输出为:1, 3, 5, 7, 9

arange

arange([start,] stop[, step,], dtype=None) 
#返回ndarray对象,numpy中的函数,与range相比,可以有浮点数

np.arange(10, 30, 5)  # >> array([10, 15, 20 25]) 从10到30 间隔5 注意 30取不到

np.arange(15)  # >> [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
data = np.arange(20).reshape(5,4)  
print(data)
# 会输出:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]]

range(data.shape[0])  # >> range(0, 5) 即从0到5,但不包括5,即0 1 2 3 4
range(data.shape[1])  # >> range(0,4)即从0到4,但不包括4,即 0 1 2 3 

reshape

a = np.arange(15).reshape(3, 5)  # array([0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14])

a.reshape(3,-1)  # 确定了3行,-1是让电脑自己算有几列

初始化矩阵

np.zeros((3,4))  # 3行4列的元素全为0的矩阵+

np.ones((5,6))  # 5行6列的元素全为1的矩阵 

np.ones((2,3,4), dtype=np.int32)  # 默认是float类型,现在将类型换为整数

np.random.random((2,3))  # 一个矩阵,元素是从-1到+1之间的随机值

矩阵乘法

dot

①一维,计算内积,得到一个值

②多维,满足矩阵相乘

import numpy as np
A.dot(B)  # 正常矩阵相乘
np.dot(A,B)  # 同上

outer

①对于多维向量,全部展开变为一维向量

②第一个参数表示倍数,使得第二个向量每次变为几倍。

③第一个参数确定结果的行,第二个参数确定结果的列

import numpy as np  

x1 = [1,2,3]  
x2 = [4,5,6]  
outer = np.outer(x1,x2)  
print outer  

[[ 4  5  6]       #1倍  
 [ 8 10 12]       #2倍  
 [12 15 18]]      #3倍 



x1 = [[1,2],[3,4]]  
x2 = [[1,1],[1,1]]  
outer = np.outer(x1,x2)  
print outer  

[[1 1 1 1]        #1倍  
 [2 2 2 2]        #2倍  
 [3 3 3 3]        #3倍  
 [4 4 4 4]]       #4倍

multiply和*

①对应位置相乘

②两个参数和结果的shape应该一致

import numpy as np
A*B  # 点乘(对应元素相乘)
np.multiply(A, B) # 同上

矩阵拼接、分割

np.hstack((a,b))  # 矩阵a和b横着拼

np.vstack((a,b))  # 矩阵a和b纵着拼

np.hsplit(a,3) # 矩阵a平均切分为3份

np.hsplit(a,(3,4))  # 矩阵a 从3处切一下,从4处切一下

np.split(GG,2,axis=1)
np.split(GG,3,axis=0)
# 若不能均分为3份,上面两个语句会出错,用下面这个就ok了
print(np.array_split(A,3,axis=1)) 

复制

a = np.arange(12)

b = a # a和b是一个位置的不同名字,改变b, a也就跟着变了

b.shape = 3,4  # a.shape也就变成了 3,4

c = a.view()  # c和a指向不同位置,但是共用同一套值

d = a.copy()  # d和a互不影响

np.grgmax

ind = data.argmax(axis=0)  # 每一列中最大元素的索引值
data_max = data[ind, range(data.shape[1])]  # 找出每一列的最大值

ind1 = data.grgmax(axis=1)  # 每一行中最大元素的索引值
# data[行号,列号] ,现在是找每行的最大值,ind里是每行的最大值的位置,即列号
data_max = data[range(data.shape[0]),ind]  # 找出每一行的最大值 

np.tile

a = np.array([[3,1],[2,1]])
b = np.tile(a, (2,3))  # 将a的行的元素个数扩大两倍,列的元素个数扩大3倍
print(a)
print(b)

[[3 1]
 [2 1]]
[[3 1 3 1 3 1]
 [2 1 2 1 2 1]
 [3 1 3 1 3 1]
 [2 1 2 1 2 1]]

np.linspace

b = np.linspace(1, 10, 5) # 线段 起始、结束、几段
print(b)

[ 1.    3.25  5.5   7.75 10.  ]

排序

a.sort()  # a中元素从小到大排序

a.sort(reverse=True)  # 从大到小排序

j = a.argsort(a) # a中元素从小到大排序的序列号
k = a[]
a[j]  # 可以得到排序后的结果

其它

A = np.arange(2,14).reshape([3,4])
print(A)
[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]
 
print(np.argmax(A)) # 最大值索引
11

print(np.mean(A)) # 平均值
7.5

print(np.average(A)) # 平均值
7.5

print(np.median(A)) # 中位数
7.5

print(np.cumsum(A)) # 每个元素是之前所有元素相加的和
[ 2  5  9 14 20 27 35 44 54 65 77 90]

print(np.diff(A)) # 相邻两个元素之间的差
[[1 1 1]
 [1 1 1]
 [1 1 1]]

print(np.clip(A,5,9)) # 小于5变为5,大于9变为9
[[5 5 5 5]
 [6 7 8 9]
 [9 9 9 9]]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章