矩阵处理
基本操作
import numpy as np
npArray1 = np.array([0,2,3,4])
print(npArray1)
print(type(npArray1))
print(npArray1.dtype)
print(npArray1.shape)
npArray2 = np.array([[1,2,3],[3,3,3],[2,3,4],[3,4,5]])
print(npArray2)
'''
[[1 2 3]
[3 3 3]
[2 3 4]
[3 4 5]]
'''
print(npArray2.shape)
'''
numpy数组的结构
内部元素类型是向上兼容的
要求是统一类型
'''
npArray4 = np.array([1,2,3,4.0])
print(npArray4.dtype)
print(npArray4)
从文件中读取数据
numpyData = np.genfromtxt("numpyData.txt",delimiter=",",dtype=str)
print(numpyData)
‘’‘
[['numpy' 'matplot' 'pandas']
['10' '20' '30']]
’‘’
print(numpyData.shape)
print(numpyData[0,2])
print(numpyData[1,0])
切片
print(numpyData[0:1])
print(numpyData[:,2])
'''
['pandas' '30']
'''
print(numpyData[:,0:2])
'''
[['numpy' 'matplot']
['10' '20']]
'''
值比较
npArray6 = np.array([
[1,2,3,4],
[5,6,7,8]]
)
print(npArray6 == 3)
'''
[[False False True False]
[False False False False]]
'''
'''某一行或者某一列上比较'''
print(npArray6[:,2] == 5)
print(npArray6[:,2] == 7)
print(npArray6[npArray6[:,2] == 5,:])
print(npArray6[npArray6[:,2] == 7,:])
逻辑判断
npArray7 = np.array([
[1,2,3,4],
[5,6,7,8]]
)
print((npArray7 % 2 == 0) & (npArray7 % 3 == 0))
‘’‘
[[False False False False]
[False True False False]]
’‘’
print((npArray7 == 2) | (npArray7 == 3))
‘’‘
[[False True True False]
[False False False False]]
’‘’
类型转换
npArray8 = np.array([
[1,2,3,4],
[5,6,7,8]]
)
print(npArray8.dtype)
npArray8 = npArray8.astype(float)
print(npArray8.dtype)
print(npArray8)
'''
[[ 1. 2. 3. 4.]
[ 5. 6. 7. 8.]]
'''
极值 / 均值
npArray9 = np.array([
[1,2,3,4],
[1,2,3,4],
[1,2,3,4],
[5,6,7,8]]
)
print(npArray9.min())
print(npArray9.max())
print(npArray9.mean())
求和
'''整体求合'''
print(npArray9.sum())
'''按行求和'''
print(npArray9.sum(axis=1))
print(npArray9.sum(axis=0))
矩阵变换
npArray10 = np.arange(15).reshape(3, 5)
print(npArray10)
'''
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
'''
print(npArray10.shape)
'''矩阵维度'''
npArray10.ndim
'''矩阵大小'''
npArray10.size
矩阵初始化
全零矩阵
np.zeros((3,5))
'''
[[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]]
'''
单位矩阵
np.ones((3,5),dtype=np.int64)
'''
[[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1]]
'''
随机矩阵
from numpy import random as rd
rd.random((2,3))
'''
[[ 0.8904717 , 0.36519284, 0.34341827],
[ 0.73784373, 0.66182521, 0.36235411]]
'''
正太分布矩阵
from numpy import pi
'''pi 代表数学 ‘Π’ = 3.1415926'''
np.linspace(1,pi,10)
'''
[1. , 1.23795474, 1.47590948, 1.71386422, 1.95181896,
2.1897737 , 2.42772844, 2.66568318, 2.90363791, 3.14159265]
'''
矩阵基本运算
矩阵加减法
npArray11 = np.array([
[1,2,3,4],
[5,6,7,8]]
)
npArray12 = np.array([
[1,2,3,4],
[1,2,3,4]]
)
print(npArray11 + npArray12)
'''
[[ 2 4 6 8]
[ 6 8 10 12]]
'''
print(npArray11 - npArray12)
'''
[[0 0 0 0]
[4 4 4 4]]
'''
矩阵乘除法
npArray13 = np.array([
[1,2,3,4],
[5,6,7,8]]
)
npArray14 = np.array([
[1,2,3,4],
[1,2,3,4]]
)
'''矩阵的乘法'''
npArray14 = npArray14.reshape(4,2)
print(npArray14)
'''
[[1 2]
[3 4]
[1 2]
[3 4]]
'''
'''矩阵的除法'''
print(np.dot(npArray13,npArray14))
'''
[[22 32]
[54 80]]
'''
矩阵的其它变换
'''矩阵其他操作'''
npArray15 = np.floor(np.random.random((3,4)) * 10)
print(npArray15)
'''
[[0. 5. 8. 6.]
[5. 9. 4. 2.]
[9. 7. 7. 3.]]
'''
npArray16 = npArray15.ravel()
print(npArray16)
npArray16.shape = (2,-1)
print(npArray16)
'''
[[0. 5. 8. 6. 5. 9.]
[4. 2. 9. 7. 7. 3.]]
'''
''' 矩阵转置 '''
print(npArray16.T)
'''
[[0. 4.]
[5. 2.]
[8. 9.]
[6. 7.]
[5. 7.]
[9. 3.]]
'''
数学 e
print(np.exp(1))
print(np.exp(np.arange(3)))
数学根号开方
print(np.sqrt(4))
拼接 / 切分
npArray17 = np.floor(np.random.random((2,4)) * 10)
print(npArray17)
'''
[[ 7. 8. 9. 6.]
[ 0. 3. 0. 2.]]
'''
npArray18 = np.floor(np.random.random((2,4)) * 10)
print(npArray18)
'''
[[ 1. 9. 1. 0.]
[ 3. 4. 8. 4.]]
'''
'''横向拼接(列不变)'''
print(np.hstack((npArray17,npArray18)))
'''
[[ 7. 8. 9. 6. 1. 9. 1. 0.]
[ 0. 3. 0. 2. 3. 4. 8. 4.]]
'''
'''竖向拼接(行不变)'''
print(np.vstack((npArray17,npArray18)))
'''
[[5. 7. 9. 0.]
[1. 4. 8. 1.]
[0. 5. 7. 1.]
[8. 1. 5. 2.]]
'''
'''横向切 (列不变)'''
print(np.hsplit(npArray17,2))
'''
[array([[5., 0.],
[3., 7.]]),
array([[9., 8.],
[3., 4.]])]
'''
'''竖向切 (行不变)'''
print(np.vsplit(npArray17,2))
'''
[array([[5., 7., 8., 7.]]), array([[3., 2., 5., 1.]])]
'''
维度取最大元素的坐标
npArray19 = np.random.random((2,4)) * 10
print(npArray19)
'''
[[ 8.38735053 0.80638508 0.86738882 7.14539061]
[ 4.37040536 2.21044121 5.20423836 8.90672936]]
'''
print(npArray19.argmax(axis=1))
'''
[0 3]
'''
print(npArray19.argmax(axis=0))
'''
[0 1 1 1]
'''
矩阵扩展
npArray20 = np.floor(np.random.random((2,4)) * 10)
print(npArray20)
'''
[[0. 7.]
[9. 0.]]
'''
''' numpy.tile()是个什么函数呢,说白了,就是把数组沿各个方向复制 '''
print(np.tile(npArray20,(2,3)))
'''
[[0. 7. 0. 7. 0. 7.]
[9. 0. 9. 0. 9. 0.]
[0. 7. 0. 7. 0. 7.]
[9. 0. 9. 0. 9. 0.]]
'''
矩阵排序
npArray20 = np.int64(np.random.random((2,2)) * 10)
print(npArray20)
'''
[[3 4]
[9 8]]
'''
print(np.sort(npArray20,axis=1))
'''
[[3 4]
[8 9]]
'''
print(npArray20.argsort(axis=1))
'''
[[0 1]
[1 0]]
'''
特征值分解
npArray21 = np.array([
[2,3],
[2,1]]
)
a, b = np.linalg.eig(npArray21)
print(a)
'''
[ 4. -1.]
'''
print(b)
'''
[[ 0.83205029 -0.70710678]
[ 0.5547002 0.70710678]]
'''