可能是最精辟的Python numpy笔记

矩阵处理

基本操作

import numpy as np

npArray1 = np.array([0,2,3,4])
print(npArray1)
# [0 2 3 4]

print(type(npArray1))
# <class 'numpy.ndarray'>

print(npArray1.dtype)
# int64

print(npArray1.shape)
# (4,)

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)
# (4, 3)

'''
numpy数组的结构
内部元素类型是向上兼容的
要求是统一类型
'''
npArray4 = np.array([1,2,3,4.0])
print(npArray4.dtype)
# float64
print(npArray4)
# [ 1.  2.  3.  4.]

从文件中读取数据

# 第一个参数文件的位置(例子中的文件在当前目录下)
numpyData = np.genfromtxt("numpyData.txt",delimiter=",",dtype=str)
print(numpyData)
‘’‘
[['numpy' 'matplot' 'pandas']
 ['10' '20' '30']]
’‘’

print(numpyData.shape)
# (2, 3)
print(numpyData[0,2])
# pandas

print(numpyData[1,0])
# 10

切片

print(numpyData[0:1])
# [['numpy' 'matplot' 'pandas']]

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)
# [False False]

print(npArray6[:,2] == 7)
# [False  True]

print(npArray6[npArray6[:,2] == 5,:])
# []

print(npArray6[npArray6[:,2] == 7,:])
# [[5 6 7 8]]

逻辑判断

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)
# int64

npArray8 = npArray8.astype(float)
print(npArray8.dtype)
# float64

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())
# 1
print(npArray9.max())
# 8
print(npArray9.mean())
#3.5

求和

'''整体求合'''
print(npArray9.sum())
# 56

'''按行求和'''
print(npArray9.sum(axis=1))
# [10 10 10 26]
print(npArray9.sum(axis=0))
# [ 8 12 16 20]

矩阵变换

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)
# (3, 5)

'''矩阵维度'''
npArray10.ndim
# 2

'''矩阵大小'''
npArray10.size
# 15

矩阵初始化

全零矩阵
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)
# [0. 5. 8. 6. 5. 9. 4. 2. 9. 7. 7. 3.]

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))
# 2.71828182846

print(np.exp(np.arange(3)))
# [ 1.          2.71828183  7.3890561 ]
数学根号开方
print(np.sqrt(4))
# 2.0

拼接 / 切分

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))) # x轴3倍,y轴2倍  注意参数顺序
'''
[[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]]
'''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值