Python numpy模块快速掌握

1. numpy的属性

import numpy as np
array = np.array([[1,2,3],[2,3,4]])
print(array)
print('number of dim:',array.ndim)  # 几阶矩阵
print('shape:',array.shape)   # 多少行 多少列
print('size:',array.size)  # 总共多少元素

2. numpy的创建array

2.1 创建的array的类型

  • int32 int 64 float32 float64 …
a = np.array([2,45,23],dtype=np.int)
print(a.dtype)
print(a)

2.2 创建多维数组

a = np.array([
    [1,2,3,4,5,6,7],
    [2,3,4,5,6,7,8],
    [3,4,5,6,7,8,9],
    [4,5,6,7,8,9,10]])
print(a)

2.3 生成全部为0的矩阵

a = np.zeros((3,3),dtype=int)   # 指定几行几列
print(a)

2.4 生成全部为1的矩阵

b = np.ones((3,5),dtype=int)  # 指定几行几列
print(b)

2.5 生成几乎接近于0的矩阵

c = np.empty((4,5))
print(c)

2.6 生成一个有序的矩阵

d = np.arange(12,dtype=int).reshape(3,4)
print(d)

2.7 生成一个线段

从1开始 到10结束 总共20段

e = np.linspace(1,10,20).reshape(4,5)
print(e)

3. numpy的基础运算

3.1 减法

import numpy as np
a = np.array([10,20,30,40])
b = np.arange(4)

# 减法
c = a-b
print(c)

3.2 加法

import numpy as np
a = np.array([10,20,30,40])
b = np.arange(4)

# 加法
d = a+b
print(d)

3.3 乘法

import numpy as np
a = np.array([10,20,30,40])
b = np.arange(4)

# 幂运算
e = b**2
print(e)

3.4 三角函数

import numpy as np
a = np.array([10,20,30,40])
b = np.arange(4)

# 三角函数
f1 = np.sin(a)
f2 = np.cos(a)
f3 = np.tan(a)
print(f1)
print(f2)
print(f3)

3.5 对矩阵中的数据进行逻辑判断

import numpy as np
a = np.array([10,20,30,40])
b = np.arange(4)

# 判断矩阵中的数是否大于或小于指定的数
print(b<3) # [True True True False]
print(b>=2)  # [False False  True  True]
print(b!=2)  #[ True  True False  True]

3.6 矩阵乘法

普通逐个相乘

a = np.array([[1,1],[0,1]])
b = np.arange(4).reshape(2,2)
    
c = a * b
print(c)

矩阵乘法法则

a = np.array([[1,1],[0,1]])
b = np.arange(4).reshape(2,2)

c_dot = np.dot(a,b)
print(c_dot)

3.7 随机矩阵

# 生成随机的矩阵 0-1之间
a = np.random.random((2,4))  # 指定 几行几列
b = np.sum(a)  # 求和
c = np.max(a)  # 最大值
d = np.min(a)  # 最小值
print(a)

3.8 矩阵中的最大值,最小值,求和

# 生成随机的矩阵 0-1之间
a = np.random.random((2,4))  # 指定 几行几列
b = np.sum(a)  # 求和
c = np.max(a)  # 最大值
d = np.min(a)  # 最小值
print(a)
#[[ 2  3  4  5]
# [ 6  7  8  9]
# [10 11 12 13]] 



print("sum:",b)
print("max:",c)
print("min:",d)

# axis 为 1 表示在行进行运算   为0 表示在列进行运算
# 求出每一行的和
print(np.sum(a,axis=1))   # [2.53072032 2.44584563]

# 求出每一列的最大值
print(np.max(a,axis=0))   # [0.98175811 0.74696834 0.82824131 0.75611382]

3.9 最大值索引和最小值索引

import numpy as np
a = np.arange(2,14).reshape(3,4)
#[[ 2  3  4  5]
# [ 6  7  8  9]
# [10 11 12 13]] 

b = np.argmax(a)  # 最大值的索引
c = np.argmin(a)  # 最小值的索引
print(b)
print(c)

3.10 计算矩阵的平均值

import numpy as np
a = np.arange(2,14).reshape(3,4)
#[[ 2  3  4  5]
# [ 6  7  8  9]
# [10 11 12 13]] 

d = np.mean(a)  # 计算矩阵的平均值
print(d.mean())
print(d)

e = np.average(a)  # 计算矩阵的平均值 和mean()相同
print(e)

3.11 计算矩阵的中位数

import numpy as np
a = np.arange(2,14).reshape(3,4)
#[[ 2  3  4  5]
# [ 6  7  8  9]
# [10 11 12 13]] 

f = np.median(a)  # 计算矩阵的中位数
print(f)

3.12 累加

import numpy as np
a = np.arange(2,14).reshape(3,4)
#[[ 2  3  4  5]
# [ 6  7  8  9]
# [10 11 12 13]] 

g = np.cumsum(a)  # 累加
print(g)  # [ 2  5  9 14 20 27 35 44 54 65 77 90]

3.13 累差

import numpy as np
a = np.arange(2,14).reshape(3,4)
#[[ 2  3  4  5]
# [ 6  7  8  9]
# [10 11 12 13]] 

h = np.diff(a) # 累差
print(h)
# [[1 1 1]
#  [1 1 1]
#  [1 1 1]]

3.14 求非0的数

import numpy as np
a = np.arange(2,14).reshape(3,4)
#[[ 2  3  4  5]
# [ 6  7  8  9]
# [10 11 12 13]] 

k = np.nonzero(a)  # 求出非 0 的数
print(k)
# (array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
# 前一个array 代表非0数的行数  后一个array 代表非0数的列数

3.15 排序

import numpy as np
a = np.arange(14,2,-1).reshape(3,4)
#[[14 13 12 11]
# [10  9  8  7]
# [ 6  5  4  3]]

print(a)
m = np.sort(a)  # 在每一行中进行排序
print(m)
# [[11 12 13 14]
#  [ 7  8  9 10]
#  [ 3  4  5  6]]

3.16 矩阵的转置

import numpy as np
a = np.arange(14,2,-1).reshape(3,4)
#[[14 13 12 11]
# [10  9  8  7]
# [ 6  5  4  3]]

n = np.transpose(a)
print(n)
print(a.T)  # 和np.transpose(a)效果一样
# [[14 10  6]
#  [13  9  5]
#  [12  8  4]
#  [11  7  3]]

# 矩阵转置相乘
print((a.T).dot(a))
# [[332 302 272 242]
#  [302 275 248 221]
#  [272 248 224 200]
#  [242 221 200 179]]

3.17 截取矩阵

import numpy as np
a = np.arange(14,2,-1).reshape(3,4)
#[[14 13 12 11]
# [10  9  8  7]
# [ 6  5  4  3]]

# 截取矩阵
# 对于矩阵a 所有小于5的数都让它等于5 所有大于9的数都让它等于9
print(np.clip(a,5,9))  

4. numpy的索引

4.1 根据索引查询数据

import numpy as np
a = np.arange(3,15).reshape(3,4)
# [[ 3  4  5  6]
#  [ 7  8  9 10]
#  [11 12 13 14]]

print(a[0])  # 查询出第0行  [3 4 5 6]

print(a[2][2])  # 查询出第2行,第2列的数据  13
print(a[2,2])  # 查询出第2行,第2列的数据  13

print(a[2,:])  # 查询出第2行所有的数  [11 12 13 14]
print(a[:,1])  # 查询出第1列所有的数  [ 4  8 12]

print(a[1,0:3])  # 查询出第1行,0到3列的数  [7 8 9]

4.2 迭代矩阵

迭代矩阵,默认是迭代矩阵的每一行

迭代矩阵的每一行

import numpy as np
a = np.arange(3,15).reshape(3,4)
# [[ 3  4  5  6]
#  [ 7  8  9 10]
#  [11 12 13 14]]

for row in a:
    print(row)
# [[ 3  4  5  6]
#  [ 7  8  9 10]
#  [11 12 13 14]]

迭代矩阵的每一列

import numpy as np
a = np.arange(3,15).reshape(3,4)
# [[ 3  4  5  6]
#  [ 7  8  9 10]
#  [11 12 13 14]]

for column in a.T:
    print(column)
# [3  7 11]
# [4  8 12]
# [5  9 13]
# [6 10 14]

迭代矩阵的每一项

import numpy as np
a = np.arange(3,15).reshape(3,4)
# [[ 3  4  5  6]
#  [ 7  8  9 10]
#  [11 12 13 14]]

print(a.flatten()) # 将矩阵转换为一行  [ 3  4  5  6  7  8  9 10 11 12 13 14]
print(a.reshape(1,a.size))  # 与a.flatten()效果相同 

for item in a.flat:
    print(item)

5. array合并

import numpy as np
a = np.array([1,1,1])
b = np.array([2,2,2])

print(np.vstack((a,b)))  # 进行上下的合并
# [[1 1 1]
#  [2 2 2]]

print(np.hstack((a,b)))   # 左右合并 [1 1 1 2 2 2]


# np.newaxis 的意思 np.newaxis所在的位置增加一个一维
print(a[:,np.newaxis])
# [[1]
#  [1]
#  [1]]

a = a[:,np.newaxis]
b = b[:,np.newaxis]
c = np.concatenate((a,b,b,a),axis=1)  # axis=0 上下方向合并  axis=1 左右方向进行合并
print(c)
# [[1 2 2 1]
#  [1 2 2 1]
#  [1 2 2 1]]

6. array分割

不能进行不等的分割!!

import numpy as np

a = np.arange(12).reshape(3,4)
# print(a)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

# 纵向分割
print(np.split(a,2,axis=1))  # 指定分割成几块,指定分割的方向
# [array([[0, 1],
#        [4, 5],
#        [8, 9]]),
#  array([[ 2,  3],
#        [ 6,  7],
#        [10, 11]])]

# 横向分割
print(np.split(a,3,axis=0))  # 指定分割成几块,指定分割的方向
# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]

如果要进行不等的分割

import numpy as np

a = np.arange(12).reshape(3,4)
# print(a)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

# 不等分割
print(np.array_split(a,2,axis=0))
# [array([[0, 1, 2, 3],
#        [4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]

利用vsplit和hsplit进行分割

import numpy as np

a = np.arange(12).reshape(3,4)
# print(a)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

print(np.vsplit(a,3))
# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]

print(np.hsplit(a,2))
# [array([[0, 1],
#        [4, 5],
#        [8, 9]]), array([[ 2,  3],
#        [ 6,  7],
#        [10, 11]])]

8. copy & deep copy

import numpy as np

a = np.arange(4)
print(a)
# [0 1 2 3]

b =a
c = a
d = b
print(b is a) # True

a[0] = 5
print(a) # [5 1 2 3]
print(b) # [5 1 2 3]
print(d) # [5 1 2 3]

d[1:3] = [22,33]
print(a) # [ 5 22 33  3]
print(d) # [ 5 22 33  3]

# 如果我们想 把a赋值给b 但是我们不想让他们关联起来
# deep copy
b = a.copy()
print(b) # [ 5 22 33  3]
a[3] = 33
print(a) # [ 5 22 33 33]
print(b) # [ 5 22 33  3]   a的值改变了 但是 b 的值并没有发生变化
posted @ 2020-07-08 18:44  mango1698  阅读(2)  评论(0编辑  收藏  举报  来源