Python科学计算----Numpy

Python科学计算----Numpy

Numpy 是一个专门用于矩阵化运算、科学计算的开源Python

NumPy将Python相当于变成一种免费的更强大的Matlab系统
(1)强大的 ndarray 多维数组结构
(2)成熟的函数库
(3)用于整合C/C++和Fortran代码的工具包
(4)实用的线性代数、傅里叶变换和随机数模块
(5)Numpy 和稀疏矩阵运算包scipy 配合使用非常方便

1、基本数据结构 ndarray

矩阵表示:使用Numpy,易得到二维矩阵

# 导入numpy
import numpy as np

# 构建多维数组
arr = np.array([[1, 2, 3], [4, 5, 6]])

print(arr)
print(type(arr))
# 结果
[[1 2 3]
 [4 5 6]]
<class 'numpy.ndarray'>

# 获取数据
print(arr[0]) # [1 2 3]

# 修改数据
arr[0] = 0
print(arr)
# 结果
[[0 0 0]
 [4 5 6]]

# 切片
# 取出第二列  ::表示所有行
print(arr[::, 1]) # [0 5]

# 重新赋值
# 从开头到第二列赋值为0
arr[:, :2] = 0
print(arr)
# 结果
[[0 0 0]
 [0 0 6]]

2、切片索引、布尔索引

image

# 导入numpy
import numpy as np
# 定义一个Numpy
arr = np.array(
    [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ]
)

# 切片索引

# 取出矩阵中的5
print(arr[1, 1])

# 取出矩阵中的3、6、9
print(arr[::, 2]) # 所有行、第3列

# 取出123、789
print(arr[::2, ::]) # 行步长为2、列从头到尾
============================================================
# 布尔索引, 返回为true位置的数据
# 取出大于4的数据
print(arr[arr > 4])  # [5 6 7 8 9]

# 取出矩阵中的奇数
print(arr % 2 == 1)
# 结果
[[ True False  True]
 [False  True False]
 [ True False  True]]

# 对ndarray的计算相当于是对里面的数据的计算
print(arr[arr % 2 == 1])
# [1 3 5 7 9]
===========================================================
# 计算
# 计算

arr = np.array(
    [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ]
)
print(arr ** 2 - 1)
# 结果
[[ 0  3  8]
 [15 24 35]
 [48 63 80]]

3、对位运算

# 导入numpy
import numpy as np

arr1 = np.array([[1, 1, 1], [2, 2, 2]])
arr2 = np.array([[3, 3, 3], [4, 4, 4]])

# 对应位置进行计算
print(arr1 + arr2)
# 结果
[[4 4 4]
 [6 6 6]]

print(arr1 - arr2)
# 结果
[[-2 -2 -2]
 [-2 -2 -2]]

print(arr1 * arr2)
# 结果
[[3 3 3]
 [8 8 8]]

print(arr1 / arr2)
# 结果
[[0.33333333 0.33333333 0.33333333]
 [0.5        0.5        0.5       ]]

# 整除//
print(arr1 // arr2)
# 结果
[[0 0 0]
 [0 0 0]]

# 取余
print(arr1 % arr2)
# 结果
[[1 1 1]
 [2 2 2]]

print(arr1 ** arr2)
# 结果
[[ 1  1  1]
 [16 16 16]]

4、重构---通过 reshape 方法将所有元素按照指定行指定列进行重构

# 导入numpy
import numpy as np

arr1 = np.array([[1, 1, 1], [2, 2, 2]])

# 重构
# 本次定义的矩阵只能重构成3行2列、2行3列、1行6列、6行1列
print(arr1.reshape((3, 2)))
# 结果
[[1 1]
 [1 2]
 [2 2]]

print(arr1.reshape((2, 3)))
print(arr1.reshape((6, 1)))
print(arr1.reshape((1, 6)))

5、拼接

通过 vstack 沿纵轴拼接
通过 hstack 沿横轴拼接
通过 concatenate 进行拼接

# 导入numpy
import numpy as np

arr1 = np.array([[1, 1, 1], [2, 2, 2]])
arr2 = np.array([[3, 3, 3], [4, 4, 4]])

# 纵向拼接
print(np.vstack((arr1, arr2)))
# 结果
[[1 1 1]
 [2 2 2]
 [3 3 3]
 [4 4 4]]

# 横向拼接
print(np.hstack((arr1, arr2)))
# 结果
[[1 1 1 3 3 3]
 [2 2 2 4 4 4]]

6、转置、翻转

# 导入numpy
import numpy as np

arr1 = np.array([[1, 1, 1], [2, 2, 2]])
arr2 = np.array([[3, 3, 3], [4, 4, 4]])

print(arr1)
# 结果
[[1 1 1]
 [2 2 2]]

# 将arr1转置
print(arr1.T) 
# 结果
[[1 2]
 [1 2]
 [1 2]]

# 将arr1左右翻转
print(np.fliplr(arr1)) 
# 结果
[[1 1 1]
 [2 2 2]]

# 将arr1上下翻转
print(np.flipud(arr1))  
# 结果
[[2 2 2]
 [1 1 1]]

7、内置操作函数

1、数学函数

numpy.log()函数是numpy模块提供的现成自然对数函数

image

# 导入numpy
import numpy as np

arr1 = np.array([[1, 2, 3], [4, 5, 6]])
# 自然对数
print(np.log(arr1))
# 结果
[[0.         0.69314718 1.09861229]
 [1.38629436 1.60943791 1.79175947]]
2、运算函数

在计算的时候,会用到差分、累加的情况。Numpy提供很多相关的运算函数

# 导入numpy
import numpy as np

arr1 = np.array([1, 4, 6, 8, 0, 1])
# 差分:两数之间取差
print(np.diff(arr1))
# 结果
[ 3  2  2 -8  1]

对于二维矩阵,需要指明是对哪一个维度进行差分

# 导入numpy
import numpy as np

arr1 = np.array([[1, 2, 3], [4, 5, 6]])

# axis :方向   axis=0 纵向,axis=1 横向
print(np.diff(arr1, axis=1))
# 结果
[[1 1]
 [1 1]]
3、统计函数

numpy提供了很多计算最大值、最小值、均值、中位数等统计量的函数,

比如统计最大值的函数numpy.amax()

image

# 导入numpy
import numpy as np

arr1 = np.array([[1, 2, 3], [4, 5, 6]])

print(np.amax(arr1, axis=1))  # 最大值
# 结果
[3 6]

print(np.std(arr1, axis=1))  # 标准差
# 结果
[0.81649658 0.81649658]

8、随机模块random

• 伪随机数的产生,可从离散分布和连续分布中产生

• 在蒙特卡洛方法、随机积分、随机过程模拟等很多方面都有应用
• 指定随机种子(seed)产生相同的随机数序列

image

9、常用分布的产生方式

image

# 导入numpy
import numpy as np

# 随机生成满足10乘5的正太分布数据
print(np.random.normal(size=(10, 5)))
# 结果
[[ 0.32878953  0.71197857  1.4588738   1.31069034 -1.17416894]
 [ 1.02082204  1.41527355 -0.28873512 -0.98912335 -1.25771646]
 [-1.27440505  2.84689987 -0.70494075  0.05973663 -0.52115097]
 [ 0.32383528  0.04148195  0.73268786 -0.0838266   0.3542903 ]
 [-1.80250937  0.16319989 -0.85771618 -0.08209453  0.64317038]
 [ 0.22995207 -0.11308609  1.85361257  0.61643364  0.69046163]
 [-1.02848903 -0.85376927  1.30259009 -0.56901766 -0.36592106]
 [-1.19991749  0.85722885 -0.15820272 -1.11556772 -0.55697908]
 [ 0.87993598 -0.87994843  0.19990547  1.92109329 -1.29323607]
 [-0.40084441  0.57890668 -0.65851584 -0.19371564 -0.26126436]]
posted @   阿伟宝座  阅读(710)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示