当前位置: 首页>编程语言>正文

python 多项式 模型 numpy多项式

一、基本数据结构

  1. numpy介绍
    numpy是一个专门用于矩阵化运算、科学计算的开源Python
    numPy将Python相当于变成一种免费的更强大的Matlab系统
    (1)强大的 ndarray 多维数组结构
    (2)成熟的函数库
    (3)用于整合C/C++和Fortran代码的工具包
    (4)实用的线性代数、傅里叶变换和随机数模块
    (5)Numpy和稀疏矩阵运算包scipy配合使用非常方便
  2. 基本数据结构ndarray
    矩阵表示:使用numpy,易得到二维矩阵
eg:
# 使用numpy之前必须先导入包
import numpy as np

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

输出结果:
[[1 2 3 4]
 [5 6 7 8]]
<class 'numpy.ndarray'>

作为ndarray对象里的数据有时并不是所需要的,那么可以使用ndarray对象的astype() 方法转为指定的数据类型

eg:
a2 = np.array(["1", "2", "3", "4"])
print(a2)
# 转换类型
print(a2.astype("int"))
# 查看矩阵信息(几行几列)
print(a2.shape)
print(array.shape)

输出结果:
['1' '2' '3' '4']
[1 2 3 4]
(4,)
(2, 4)

二、ndarray相关操作

  1. 索引
    将数据转为ndarray对象后,会需要按某种方式来抽取数据
    ndarray对象提供了两种索引方式:
    切片索引
    切片索引和对列表list的切片索引相似,不过由原本的一维切片变为多维
    索引后还可以直接对应该位置重新赋值
    可通过shape属性得到数组的行数和列数
eg:
a3 = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
# 切片之后类型还是 ndarray
print(a3)
# 取某一个位置的数据
print(a3[1, 2])
# 取一部分数据
print(a3[1:, 2:])
# 矩阵翻转
print(a3[::-1, ::-1])
print(a3[::-1, ::])

输出结果:
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
7
[[ 7  8]
 [11 12]]
[[12 11 10  9]
 [ 8  7  6  5]
 [ 4  3  2  1]]
[[ 9 10 11 12]
 [ 5  6  7  8]
 [ 1  2  3  4]]

布尔值索引
通过添加条件判断数组中每个值的真/假转为布尔值再对原数组进行索引,为真(True)时会被抽取出来

eg:
# 布尔值索引
print(a3[a3 > 5])
print(a3 > 5)

输出结果:
[ 6  7  8  9 10 11 12]
[[False False False False]
 [False  True  True  True]
 [ True  True  True  True]]
  1. 切分
    使用split将ndarray按照行平均分为几个ndarray
  2. 重构
    通过 reshape 方法将所有元素按照指定行指定列进行重构
eg:
# 重构
print(a3.reshape(2, 6))

输出结果:
[[ 1  2  3  4  5  6]
 [ 7  8  9 10 11 12]]
  1. 拼接
    通过 vstack 沿纵轴拼接
    通过 hstack 沿横轴拼接
    通过 concatenate 进行拼接
  2. 转置、翻转
    转置: transpose 方法或者在数组后加 .T
    翻转: fliplr 左右翻转、flipud 上下翻转
eg:
# 转置
print(a3.transpose())
print(a3.T)
# 左右翻转
print(np.fliplr(a3))
# 上下翻转
print(np.flipud(a3))
# 上下左右翻转
print(np.flip(a3))

输出结果:
[[ 1  5  9]
 [ 2  6 10]
 [ 3  7 11]
 [ 4  8 12]]
[[ 1  5  9]
 [ 2  6 10]
 [ 3  7 11]
 [ 4  8 12]]
[[ 4  3  2  1]
 [ 8  7  6  5]
 [12 11 10  9]]
[[ 9 10 11 12]
 [ 5  6  7  8]
 [ 1  2  3  4]]
[[12 11 10  9]
 [ 8  7  6  5]
 [ 4  3  2  1]]
  1. 对位运算
    指ndarray进行加减乘除运算时,使对应位置的数值进行加减乘除运算
eg:
# 对位运算
a6 = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
a7 = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

print(a6 + a7)
print(a6 - a7)
print(a6 * a7)
print(a6 / a7)

输出结果:
[[ 2  4  6  8]
 [10 12 14 16]
 [18 20 22 24]]
[[0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]]
[[  1   4   9  16]
 [ 25  36  49  64]
 [ 81 100 121 144]]
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]

三、结构化数据

  1. 举例说明
    (1) 首先你需要一个数据文件,此处我新建了一个test.txt,内容如下
    1,2,3
    4,5,6
    7,8,9
    (2) 对此文件进行处理
lines = []
with open(r"E:\PycharmProjects\hello\test.txt", "r") as file:
    lines = file.readlines()

test = [tuple(line.strip().split(",")) for line in lines]
print(test)

dtype = [("id", int), ("name", object), ("score", int)]

np_test = np.array(test, dtype=(dtype))
#按名称索引
print(np_test["id"])
#按名称索引 获取score=3的数据
print(np_test[np_test["score"] == 3])

输出结果:
[('1', '2', '3'), ('4', '5', '6'), ('7', '8', '9')]
[1 4 7]
[(1, '2', 3)]

四、内置操作函数

  1. 数学函数
    numpy.log()函数是numpy模块提供的现成自然对数函数
eg:
a8 = np.array([1, 2, 3, 4])
print(np.log(a8))
print(np.sin(a8))

输出结果:
[0.         0.69314718 1.09861229 1.38629436]
[ 0.84147098  0.90929743  0.14112001 -0.7568025 ]
  1. 运算函数
    在计算的时候,会用到差分、累加的情况。numpy提供很多相关的运算函数
    差分:numpy.diff()方法
eg:
print(np.diff(a8))

输出结果:
[1 1 1]

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

python 多项式 模型 numpy多项式,python 多项式 模型 numpy多项式_numpy,第1张

eg:
a9 = np.array([[1, 2, 3], [4, 5, 6]])
# 行与行之间差分
print(np.diff(a9, axis=0))
# 列于列之间差分
print(np.diff(a9, axis=1))

输出结果:
[[3 3 3]]
[[1 1]
 [1 1]]
  1. 统计函数
    numpy提供了很多计算最大值、最小值、均值、中位数等统计量的 函数,比如统计最大值的函数numpy.amax()
eg:
# 计算标准差
print(np.std(a9))

输出结果:
1.707825127659933

五、随机模块random

  1. 伪随机数的产生,可从离散分布和连续分布中产生
    在蒙特卡洛方法、随机积分、随机过程模拟等很多方面都有应用
    指定随机种子(seed)产生相同的随机数序列
eg:
# 产生一个3行4列的矩阵,其中的每一个元素为[0, 1]之间的浮点型随机数
r1 = np.random.rand(3, 4)
print(r1)
# 产生一个[0, 10]之间的整型随机数
print(np.random.randint(0, 10))

输出结果:
[[0.94162658 0.09145497 0.56586785 0.19829864]
 [0.10717488 0.28461505 0.56043926 0.78945516]
 [0.59883978 0.08212525 0.97394346 0.32761456]]
8
  1. 常用分布的产生方式
eg:
# 二项分布:产生5个服从二项分布B(5, 0.5)的样本
print(np.random.binomial(n=5, p=0.5, size=5))
# 均匀分布:产生5个服从均匀分布U[-1, 1]的样本
print(np.random.uniform(-1, 1, 5))
# 标准正态分布:产生2*5的标准正态分布样本
print(np.random.normal(size=(2, 3)))
# 正态分布:产生2*5的均值为0,标准差为5的正态分布样本
print(np.random.normal(loc=0, scale=5, size=(2, 3)))

输出结果:
[1 2 2 1 0]
[-0.52674721  0.50713521 -0.23635187 -0.37280082 -0.7381546 ]
[[-0.69065465  0.02140358  0.22315663]
 [ 0.12292919  2.07374299  0.92140683]]
[[-0.96394493  2.52926172  0.27291902]
 [ 1.36460891 -3.24371614 -3.30661156]]



https://www.xamrdz.com/lan/5fm1957298.html

相关文章: