Martian148's blog Martian148's blog
首页
  • ICPC 算法笔记
  • ICPC 算法题解
  • 体系结构
  • 高等数学
  • 线性代数
  • 概率论与数理统计
  • 具体数学
  • Martian148的奇思妙想
  • 游记
  • 通识课笔记
关于
  • useful 网站
  • 友情链接
  • 分类
  • 归档

Martian148

一只热爱文科的理科生
首页
  • ICPC 算法笔记
  • ICPC 算法题解
  • 体系结构
  • 高等数学
  • 线性代数
  • 概率论与数理统计
  • 具体数学
  • Martian148的奇思妙想
  • 游记
  • 通识课笔记
关于
  • useful 网站
  • 友情链接
  • 分类
  • 归档
  • ACM - ICPC

  • 编程语言

  • 体系结构

  • Web

  • 人工智能

    • 机器学习笔记
    • 《python科学计算入门》学习笔记
      • Numpy
        • 导入
        • 创建数组
        • 二维数组的创建
        • 值为 0 和 1 的数组
        • 单位矩阵、对角矩阵、三角矩阵
        • 数组值等间距变化的数组
        • 数组的访问
        • 索引和切片
        • 视图和副本
        • 数组的基本运算
        • 通用函数
        • 矩阵运算
      • Matplotlib
        • 导入
        • 基础图标
        • 简单二维图表
    • LLM101 NLP学习笔记
  • 计算机网络

  • 数据库

  • 编程工具

  • 计算机科学
  • 人工智能
martian148
2025-05-30
目录

《python科学计算入门》学习笔记

# Numpy

# 导入

import numpy as np
1

# 创建数组

import numpy as np
x = np.array([1,2,3,4])
print(type(x))
print(x.ndim)
print(x.shape)
print(x)
1
2
3
4
5
6
<class 'numpy.ndarray'>
1
(4,)
[1 2 3 4]
1
2
3
4
  • type(x) 返回的是 x 的类型
  • x.ndim 是 x 的维度
  • x.shape 返回的是 x 各个维度的长度,由于这个只有一个维度所以只返回一个结果

# 二维数组的创建

y = np.array([[1],[2],[3]])
print(y)
print(y.shape)
1
2
3
[[1]
 [2]
 [3]]
(3, 1)
1
2
3
4

# 值为 0 和 1 的数组

np.ones((2,3))
1
array([[1., 1., 1.],
       [1., 1., 1.]])
1
2

如果元素为 1 的数组乘某一个数值,就可以创建填满该数值的数组

np.full((2,3),-1)
1
array([[-1, -1, -1],
       [-1, -1, -1]])
1
2
x = np.empty((2,3))
x
1
2
array([[1., 1., 1.],
       [1., 1., 1.]])
1
2

注意 empty 函数只用于开创这么多空间,但是没有初始化数组里面的值,所以速度较快

# 单位矩阵、对角矩阵、三角矩阵

np.identity(3)
1
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
1
2
3
np.diag([1,2,4],k = -1)
1
array([[0, 0, 0, 0],
       [1, 0, 0, 0],
       [0, 2, 0, 0],
       [0, 0, 4, 0]])
1
2
3
4
  • k 指定对角元素排列的位置
np.tri(3)
1
array([[1., 0., 0.],
       [1., 1., 0.],
       [1., 1., 1.]])
1
2
3
x = np.array([[2,-1],
              [3,4]])
np.tril(x)
1
2
3
array([[2, 0],
       [3, 4]])
1
2

tril 可以在原有矩阵的基础上保留下三角,triu 是保留上三角

# 数组值等间距变化的数组

np.arange(1,10,2)
1
array([1, 3, 5, 7, 9])
1
np.linspace(0,1,5,endpoint=False)
1
array([0. , 0.2, 0.4, 0.6, 0.8])
1
np.linspace(0,1,5)
1
array([0.  , 0.25, 0.5 , 0.75, 1.  ])
1

linspace 的参数是 (start, stop, num) 的形式给出的,num 可以确定区间内参数的数量,如果设定 endpoint=False 那么数组中不会包含 stop 的值

# 数组的访问

# 索引和切片

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

# 视图和副本

x = np.array([1,2,3,4,5])
y = x[:3]

y[:] = 0
print(y)
print(x)
1
2
3
4
5
6
[0 0 0]
[0 0 0 4 5]
1
2

在这里,我们修改了 y 之后发现 x 也被改变了,这种和原有数组共享内存的数组被称为视图,所以需要使用 copy 来创建副本

x = np.array([1,2,3,4,5])
y = x[:2].copy()

y[:] = 0

print(y)
print(x)
1
2
3
4
5
6
7
[0 0]
[1 2 3 4 5]
1
2

这样子 x 的值就没有被修改了

# 数组的基本运算

x = np.array([[1,-1],
              [3,2]])

y = np.array([[0, 1],
              [-2,1]])
x+y
1
2
3
4
5
6
array([[1, 0],
       [1, 3]])
1
2

当 x 和 y 的维度及大小都相同时,直接相加

如果维度不同时,需要把小的维度拓展到和大的维度相同后再进行运算,就是对原数组进行复制,这种处理被叫做广播

x = np.array([[1,2],
              [3,4]])
y = np.array([[5,6]])
x+y
1
2
3
4
array([[ 6,  8],
       [ 8, 10]])
1
2

这里可以理解为

[1234]+[5656]=[68810] \begin{bmatrix} 1 & 2\\ 3 & 4 \end{bmatrix} + \begin{bmatrix} 5 & 6\\ 5 & 6 \end{bmatrix} = \begin{bmatrix} 6 & 8\\ 8 & 10 \end{bmatrix} [13​24​]+[55​66​]=[68​810​]

# 通用函数

x = np.arange(5)
np.sqrt(x)
1
2
array([0.        , 1.        , 1.41421356, 1.73205081, 2.        ])
1

对数组进行运算可以理解成对数组中的每个数单独进行运算

x = np.array([1,2,3,4])
y = np.array([4,3,2,1])
x > y
1
2
3
array([False, False,  True,  True])
1

# 矩阵运算

A = np.array([[1, -2],
              [2, 0]])
B = np.array([[3, 4],
              [-1, -3]])

C = A @ B
C
1
2
3
4
5
6
7
array([[ 5, 10],
       [ 6,  8]])
1
2

# Matplotlib

# 导入

import matplotlib.pyplot as plt
1

# 基础图标

# 简单二维图表

图表对象是 Figure,而 Axes 对象包含在 Figure 里面,表示某一个图表的绘制区域

使用 add_axes 方法可以在 Figure 中添加新的 Axes,然后使用元组对 Axes 对位置和大小进行指定

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)

fig = plt.figure()

# 坐标(0.15, 0.1),宽70%,高80%
ax = fig.add_axes((0.15, 0.1, 0.7, 0.8))

ax.plot(x, y)
1
2
3
4
5
6
7
8
9
10
11
12

image.png

机器学习笔记
LLM101 NLP学习笔记

← 机器学习笔记 LLM101 NLP学习笔记→

最近更新
01
在 ACM 集训队年会上的讲话
07-01
02
计算机网络笔记
06-13
03
LLM101 NLP学习笔记
06-02
更多文章>
Theme by Vdoing | Copyright © 2024-2025 Martian148 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式