NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵。
安装
首先需要安装python,直接从官网下载安装包进行安装即可。然后使用pip命令安装numpy,命令如下:
pip install numpy
数据类型
numpy是用来做矩阵处理的,矩阵中的数据类型如下:
类型 | 描述 |
---|---|
bool | 用一位存储的布尔类型(值为TRUE或FALSE) |
inti | 由所在平台决定其精度的整数(一般为int32或int64) |
int8 | 整数,范围为128至127 |
int16 | 整数,范围为32 768至32 767 |
int32 | 整数,范围为231至231 1 |
int64 | 整数,范围为263至263 1 |
uint8 | 无符号整数,范围为0至255 |
uint16 | 无符号整数,范围为0至65 535 |
uint32 | 无符号整数,范围为0至2321 |
uint64 | 无符号整数,范围为0至2641 |
float16 | 半精度浮点数(16位):其中用1位表示正负号, 5位表示指数, 10位表示尾数 |
float32 | 单精度浮点数(32位):其中用1位表示正负号, 8位表示指数, 23位表示尾数 |
float64或float | 双精度浮点数(64位):其中用1位表示正负号, 11位表示指数, 52位表示尾数 |
complex64 | 复数,分别用两个32位浮点数表示实部和虚部 |
complex128或complex | 复数,分别用两个64位浮点数表示实部和虚部 |
数组
使用arange,array创建数组。
import numpy as np
#arange创建一维数组对象
a = np.arange(10,dtype=np.int64)
print(a," type:",a.dtype," size:",a.size," itemsize:",a.itemsize," nbytes:",a.nbytes)
#分片,索引
print("a[2]=",a[2]," a[2:4]=",a[2:4]," a[5:]=",a[5:]," a[0:10:2]=",a[0:10:2]," a[::-1]=",a[::-1])
#使用array创建多维数组
a = np.array([[1,2,3],[1,2,3],[1,2,3]])
print(a)
输出结果如下:
[0 1 2 3 4 5 6 7 8 9] type: int64 size: 10 itemsize: 8 nbytes: 80
a[2]= 2 a[2:4]= [2 3] a[5:]= [5 6 7 8 9] a[0:10:2]= [0 2 4 6 8] a[::-1]= [9 8 7 6 5 4 3 2 1 0]
[[1 2 3]
[1 2 3]
[1 2 3]]
维度变换
使用reshape,resize把一维数组变为多维数组
使用flatten,ravel把多维数组变为一维数组,
使用transpose和T转置数组,行变列,列变行。
import numpy as np
#使用reshape变换数组形状,返回新数组,原数组不变,相对应的resize会改变原数组
a = np.arange(24).reshape((2,3,4))#把原数组变为2层3行4列的数组
print(a)
print(a[0,:,:])#取得第一层的所有数据,也可以直接用a[0]
#flatten,ravel展平操作,变为一维数组
b = a.ravel()#
print(b)
c = a.flatten()
print(c)
#使用元组设置,和reshape功能相同
c.shape = (2,3,4)
print(c)
#T属性和transpose转置
a = np.arange(12)
b = a.reshape((2,6))
c = b.transpose()
print(c)
print(b.T)
输出结果如下:
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
[[ 0 6]
[ 1 7]
[ 2 8]
[ 3 9]
[ 4 10]
[ 5 11]]
[[ 0 6]
[ 1 7]
[ 2 8]
[ 3 9]
[ 4 10]
[ 5 11]]
加法和乘法
#数组组合,加法和乘法
a = np.arange(9).reshape((3,3))
b = a * 2 #数组中的每一项都乘以2
print(b)
c = a + b #对应位置相加
print(c)
输出结果如下:
[[ 0 2 4]
[ 6 8 10]
[12 14 16]]
[[ 0 3 6]
[ 9 12 15]
[18 21 24]]
组合
把多个数组组合成为一个数组
import numpy as np
#数组组合
a = np.arange(9).reshape((3,3))
b = a * 2 #数组中的每一项都乘以2
#水平组合
c = np.hstack((a,b))
print(c)
#垂直组合
c = np.vstack((a,b))
print(c)
#深度组合
c = np.dstack((a,b))
print(c)
#列组合,对于二维数组相当于水平组合
c = np.column_stack((a,b))
print(c)
#行组合,对于二维数组相当于垂直组合
c = np.row_stack((a,b))
print(c)
输出结果:
[[ 0 1 2 0 2 4]
[ 3 4 5 6 8 10]
[ 6 7 8 12 14 16]]
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 0 2 4]
[ 6 8 10]
[12 14 16]]
[[[ 0 0]
[ 1 2]
[ 2 4]]
[[ 3 6]
[ 4 8]
[ 5 10]]
[[ 6 12]
[ 7 14]
[ 8 16]]]
[[ 0 1 2 0 2 4]
[ 3 4 5 6 8 10]
[ 6 7 8 12 14 16]]
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 0 2 4]
[ 6 8 10]
[12 14 16]]
分割
把一个数组分割成为多个数组。
import numpy as np
#数组分割
a = np.arange(9).reshape((3,3))
b = a * 2 #数组中的每一项都乘以2
#水平分割
b = np.hsplit(a,3)
print(b)
#垂直分割
b = np.vsplit(a,3)
print(b)
#深度分割,只能用于3维数组
a = np.arange(27).reshape(3, 3, 3)
b = np.dsplit(a,3)
print(b)
输出结果如下:
[array([[0],
[3],
[6]]), array([[1],
[4],
[7]]), array([[2],
[5],
[8]])]
[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]
[array([[[ 0],
[ 3],
[ 6]],
[[ 9],
[12],
[15]],
[[18],
[21],
[24]]]), array([[[ 1],
[ 4],
[ 7]],
[[10],
[13],
[16]],
[[19],
[22],
[25]]]), array([[[ 2],
[ 5],
[ 8]],
[[11],
[14],
[17]],
[[20],
[23],
[26]]])]