Numpy创建矩阵
矩阵的创建
1.使用 mat 函数创建矩阵: matr1 = np.mat(“1 2 3; 4 5 6; 7 8 9”)
2.使用 matrix 函数创建矩阵:matr2= np.matrix([[1,2,3], [4,5,6], [7,8,9]])
3.使用 bmat 函数合成矩阵:np.bmat (“arr1 arr2; arr1 arr2”)
import numpy as np
# 一、创建矩阵
# 1.mat函数
#方法一:
A = np.mat([[1,0,1,0],[-1,2,0,1],[1,0,4,1],[-1,-1,2,0]])
print(A)
#方法二:
B = np.mat('1 0 0 0;0 1 0 0; -1 2 1 0;1 1 0 1')
print(B)
# 1.matrix函数与方法一相同
# np.matrix
# 3.bmat函数:通过分块矩阵创建大矩阵。
A = np.mat([[1,1],[1,1]])
B = np.mat([[2,2],[2,2]])
C = np.mat([[3,3],[3,3]])
D = np.mat([[4,4],[4,4]])
big_mat = np.bmat([[A,B],[C,D]])
print(big_mat)
数学中的矩阵
矩阵的运算
矩阵与数相乘:matr13
矩阵相加减:matr1±matr2
矩阵相乘:matr1matr2
矩阵对应元素相乘:np.multiply(matr1,matr2)
矩阵特有的属性
属性 | 说明 |
---|---|
T | 返回自身的转置matr1.T |
H | 返回自身的共轭转置matr1.H |
I | 返回自身的逆矩阵matr1.I |
A | 返回自身数据的2维数组的一个视图matr1.A |
ufunc函数以及ufunc函数的广播机制
四则运算:加(+)、减(-)、乘(*)、除(/)、幂(**)。数组间的四则运算表示
对每个数组中的元素分别进行四则运算,所以形状必须相同。
比较运算:>、<、= =、>=、<=、!=。比较运算返回的结果是一个布尔数组,每个元素
为每个数组对应元素的比较结果。
逻辑运算:np.any 函数表示逻辑“or”,np.all 函数表示逻辑“and”。运算结果返回布尔值。
x=np.array( [1,3,5] ) x=np.array( [1,3,5] )
y=np.array( [2,4,3] ) y=np.array( [2,4,3] )
print(np.all(x= =y)) print(np.any(x= =y))
广播机制是指指不同形状的数组之间执行算术运算的方式。需要遵循 4 个原
则。
让所有输入数组都向其中 shape 最长的数组看齐,shape 中不足的部分都通过在前面加
1 补齐。
输出数组的 shape 是输入数组 shape 的各个轴上的最大值。
如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度为 1 时,这个数组能
够用来计算,否则出错。
当输入数组的某个轴的长度为 1 时,沿着此轴运算时都用此轴上的第一组值。
例:一维数组的广播机制:
x=np.array([[1,3,5],[1,1,1],[2,2,2],[3,3,3]])
y=np.array([2,4,3])
print (x+y)
x=np.array([[0,0,0],[1,1,1],[2,2,2],[3,3,3]])
y=np.array([1,2,3,4]).reshape((4,1))
print (x+y)
利用Numpy进行统计分析
一、 numpy文件的读写机制
numpy文件读写主要有二进制的文件读写和文件列表形式的数据读写两种形式。
# 1.二进制读写
# (1)save()函数---写--->硬盘
x = np.array([[0,0,0],[1,1,1],[2,2,2],[3,3,3]])
np.save('x.npy',x)
# (2)load()函数---读
x_array = np.load('x.npy')
print(x_array)
#注意:存储的时候可以省略扩展名,但是读取时不可以。
#(3)savez()----可以将多个数组保存到一个文件当中
y = np.array([1,2,3,4,5,6])
np.savez('xy',x,y)
# 2.文本数据读取(txt,csv格式)
# (1)写
np.savetxt('x.txt',x,delimiter=',',fmt='%d')
# (2)读
x_array = np.loadtxt('x.txt',delimiter=',')
print(x_array)
# (3)genfromtxt()函数
# 面向结构化数组和缺失数据。genfromtxt和loadtxt多用genfromtxt
jobInfo = np.dtype([('name',np.str_,40),('number',np.int32),('loca',np.str_,16)])
jobs = np.loadtxt('jobs.txt',dtype=jobInfo,delimiter=',')
print(jobs)
jobs2 = np.genfromtxt('jobs.txt',dtype=jobInfo,delimiter=',')
print(jobs2)
统计分析
numpy排序
#1.排序
# (1)sort()函数---直接排序
# 用法:arr.sort()
# axis=0表示沿纵轴排序
# axis=1~~~~~~横轴~~~
# 默认axis=-1 沿横轴
arr = np.array([[4,3,2],[2,1,4]])
print(arr)
'4,3,2' \
'2,1,4'
# arr.sort()
# print(arr)
'[[2 3 4]'
'[1 2 4]]'
arr.sort(axis=0)
print(arr)
# 2间接排序---不改变原始数据
# (1)argsort()函数
# 返回值为重新排序后值的下标
arr = np.array([2,1,0,5,3])
arr1 = arr.argsort()
print('原始数据:\n',arr)
print('排序后的数据:\n',arr1)
for i in arr1:
print(arr[i],end='~')
# (2)lexsort()函数
# 返回值是按照最后一个传入数据排序的。eg:np.lexsort((a,b,c))
a = np.array([3,2,6,4,5])
b = np.array([50,30,40,20,10])
c = np.array([400,300,600,100,200])
d = np.lexsort((a,b,c))#[3 4 1 0 2]
print(d)