NumPy是在Python中进行科学计算的基础包。它提供多维数组(矩阵)对象各种各样的函数操作。在数组上的快速操作,包括数学、逻辑、转换、排序、选择、方差、期望、离散傅里叶变换转换等等,我们在科学计算中常用的基本的线性代数,基本的统计运算,随机模拟等等都在numpy得到支持,可见numpy是多么的强大。
我第一次接触numpy时是由于需要将matlab训练完成的模型落地,发布到ubuntu服务器上,需要将matlab的源码转为python去编写,这时学习numpy的开始。
1、数据类型
类型 | 描述 |
bool_ | Boolean (True or False) stored as a byte |
int_ | 默认的整数类型 (和C语言的long型相同; 通常是int32或者int64) |
intc | 和C语言的int类型一致 |
intp | 整数用于索引 (类似 C ssize_t; 通常是int32或者int64) |
int8 | Byte (-128 to 127) |
int16 | 整型 (-32768 to 32767) |
int32 | 整型(-2147483648 to 2147483647) |
int64 | 整型(-9223372036854775808 to 9223372036854775807) |
uint8 | 无符号 整型 (0 to 255) |
uint16 | 无符号 整型 (0 to 65535) |
uint32 | 无符号 整型 (0 to 4294967295) |
uint64 | 无符号 整型 (0 to 18446744073709551615) |
float_ | Shorthand for float64. |
float16 | 半精度浮点数:符号位,5位指数,10位的尾数 |
float32 | 单精度浮点数:符号位,8位指数,23位的尾数 |
float64 | 双精度浮点数:符号位,11位指数,52位的尾数 |
complex_ | complex128简写 |
complex64 | 用两个32位的浮点数表示的复数 |
complex128 | 用两个64位的浮点数表示的复数 |
2、矩阵操作
# -*- coding: utf-8 -*-
"""
Created on Mon Jul 16 18:13:11 2018
@author: linxiaojie
"""
import numpy as np
#创建长度为6的,元素都是0一维数组array([0, 1, 2, 3, 4, 5])
range_array = np.arange(6)
print(range_array)
# 随机生0-14成续的3*4的矩阵
a = np.arange(12).reshape(3,4)
print(a)
# 生成大小为1-10的线性等分向量,注意num默认为50
line_space = np.linspace(1,10)
print(line_space)
# 生成大小为1-10的对数等分向量,注意num默认为50
log_space = np.logspace(1,10)
print(log_space)
# 生成单位矩阵
eye = np.eye(3,3)
print(eye)
# 生成2*4全1矩阵
b = np.ones((3,4), np.int64)
print(b)
# 生成4*5全0矩阵
c = np.zeros((3, 4))
print(c)
# 矩阵横向合并
d = np.hstack((b,c))
print(d)
# 矩阵纵向合并
e = np.vstack((b,c))
print(d)
# 从指定的矩阵中提取出相应的行和列,生成新的矩阵, 上面的e是6*4矩阵,提取第2行到第4行中的第3列到第四列,即得到一个3*2的矩阵
f = e[1:4, 2:4]
print(f)
# 获取矩阵的行列,返回的是一个元组
array_shape = np.shape(f)
print(array_shape)
#创建3行2列,未初始化的二维数组
empty_array = np.empty((2,3))
# 两个矩阵数值求和,减法类同
g = a + b
print(g)
# 两个同型矩阵数值相乘
j = a * b
print(j)
# 矩阵中所有元素乘以某系数
k = 3 * j
print(k)
# 两个矩阵相乘
tmp = np.floor(10*np.random.rand(4,3))
h = np.dot(g, tmp)
print(h)
# 删除矩阵的第2和第3行
i = np.delete(a,(1,2),0)#删除a的第二,三行
print(i)
在我们日常使用中当然不仅仅上面这些操作,例如使用where去查找、使用vsplit去切分、三角函数求值、求方差及期望等等,后面有机会再详述。
3、I/O操作
# -*- coding: utf-8 -*-
"""
Created on Wed Jul 18 15:33:48 2018
@author: linxiaojie
"""
import numpy as np
from io import BytesIO
# 从数据串中读取,参数还有很多种,根据实实际需求从官方文档获取相应的帮助
data = "1, 2, 3\n4, 5, 6"
np.genfromtxt(BytesIO(data.encode()), delimiter=",")
# 从文件中读取
data = numpy.genfromtxt("data.txt", delimiter=",")
print(type(data))