Numpy_06 数组的文件输入输出 线性代数

github博客传送门
csdn博客传送门

Numpy系列

Numpy_01 创建 指定数据类型 查看维度和数据类型 简单的数学运算
Numpy_02 索引和切片
Numpy_03 转置和轴对换
Numpy_04 通用函数
Numpy_05 数据处理
Numpy_06 数组的文件输入输出 线性代数

将数组写入本地,将数组从本地读取

import numpy as np
# NumPy能够读写磁盘上的文本数据或二进制数据。
# np.save和np.load是读写磁盘数组数据的两个主要函数。默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中的:
arr = np.arange(10)  # 生成一个数组
np.save('some_array', arr)  # 保存数组 arr 名称为 'some_array'
# 如果文件路径末尾没有扩展名.npy系统会默认加上
print(np.load('some_array.npy'))
# 通过np.savez可以将多个数组保存到一个未压缩文件中,将数组以关键字参数的形式传入即可
np.savez('array_archive.npz', a=arr, b=arr)

arch = np.load('array_archive.npz')
print(arch['b'])
# 如果要将数据压缩,可以使用numpy.savez_compressed:
np.savez_compressed('arrays_compressed.npz', a=arr, b=arr)

线性代数

线性代数(如矩阵乘法、矩阵分解、行列式以及其他方阵数学等)是任何数组库的重要组成部分。
不像某些语言(如MATLAB),通过*对两个二维数组相乘得到的是一个元素级的积,而不是一个矩阵点积。
因此,NumPy提供了一个用于矩阵乘法的dot函数(既是一个数组方法也是numpy命名空间中的一个函数):

x = np.array([[1., 2., 3.], [4., 5., 6.]])
y = np.array([[6., 23.], [-1, 7], [8, 9]])

print(x)
print(y)
print(x.dot(y))  # 等价于 print(np.dot(x, y))

# 一个二维数组跟一个大小合适的一维数组的矩阵点积运算之后将会得到一个一维数组:
print(np.ones(3))  # 生成一个 数组 值为 1
print(np.dot(x, np.ones(3)))  # 点积

print(x @ np.ones(3))  # 点积 相等于 dot

numpy.linalg

numpy.linalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西。
它们跟MATLAB和R等语言所使用的是相同的行业标准线性代数库,
如BLAS、LAPACK、Intel MKL(Math Kernel Library,可能有,取决于你的NumPy版本)等:

from numpy.linalg import inv, qr

X = np.random.randn(5, 5)  # 随机生成一个 5 * 5 的矩阵
mat = X.T.dot(X)  # X的转置 点乘X
print('inv(mat):\n', inv(mat))  # 求方阵的逆  原阵乘逆阵为单位矩阵
print('mat.dot(inv(mat)):\n', mat.dot(inv(mat)))  # 矩阵点乘 自己的逆阵

q, r = qr(mat)
print('q:\n', q)
print('r:\n', r)

常用函数表

posted @ 2018-09-21 09:17  账号  阅读(132)  评论(0编辑  收藏  举报