科学计算库—numpy随笔

这篇具有很好参考价值的文章主要介绍了科学计算库—numpy随笔。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

8.1、numpy

本质是多维数组对象

list 类型转为 numpy 数组 更有利科学计算

8.1.1、为什么用 numpy?

1.虽然Python数组结构中的列表list实际上就是数组,但是列表list保存的是对象的指针,list中的元素在系统内存中是分散存储的,例如[0,1,2]需要3个指针和3个整数对象,浪费内存和计算时间。

2.NumPy数组存储在一个均匀连续的内存块中,访问更快;NumPy中的矩阵计算可以采用多线程的方式,计算更快。

结论:numpy 可提供高性能的矩阵运算,作为数组 numpy 提供了许多方便统计计算的功能,数组结构为ndarray。

numpy 和 list 有什么区别?

从存储数据来看,numpy 存储的是矩阵,list 存储的是序列

下面举个例子

li = [1,2,3,4]

Out: [1, 2, 3, 4]

arr = np.array(li)

Out: [1 2 3 4]

8.1.2、numpy 数据类型推理

numpy 会对数据类型进行推理,规则:转为适用性更强的数据类型。

下面举个例子:

科学计算库—numpy随笔

为什么会进行数据类型推理?

numpy 适合处理统一的数值数组数据,数据类型推理就是为了保证数值类型统一。

8.1.3、numpy 指定长度数组快速创建

”零矩阵“

np.zeros()
np.zeros((3,4))
np.zeros((1,3,4))
np.zeros((1,1,3,4))

超出二维后的形式,以np.zeros((1,3,4))为例,嵌套1层,层内3行4列;

array([[[0., 0., 0., 0.],
     [0., 0., 0., 0.],
     [0., 0., 0., 0.]]])

(1,1,3,4)相比(1,3,4),增加一维,多嵌套一层:

array([[[0., 0., 0., 0.],
     [0., 0., 0., 0.],
     [0., 0., 0., 0.]]])

(2,1,3,4)相比(1,1,3,4),数值增加,平行矩阵增加:

array([[[[0., 0., 0., 0.],
      [0., 0., 0., 0.],
      [0., 0., 0., 0.]]],


    [[[0., 0., 0., 0.],
      [0., 0., 0., 0.],
      [0., 0., 0., 0.]]]])

补充:

”1矩阵“

np.ones((row,col))

8.1.4、numpy 哪个是行、列?

最后两组数为行和列。

倒是第一组为列,倒数第二组为行(若存在)

8.1.5、numpy 如何进行数据类型转换?

arr = np.array([1.1,1.2,-1,-3.3])

以 arr 为例,将 arr 内的数据类型转为 int32:

arr.astype(np.int32)

8.1.6、numpy 有几种乘法?

四种。

1)星乘(*)

数组的对应元素相乘

arr1 * arr2

2)点乘(np.dot)

就是矩阵乘法

a = np.array([...])
b = np.array([...])
np.dot(a,b)

3)叉乘(np.cross)、外乘(np.outer)

细说NumPy数组的四种乘法的使用

8.1.7、numpy 索引和切片操作

举个例子:

科学计算库—numpy随笔

补充:

花式索引

通过整型数组进行索引

花式索引为什么有两层中括号?

以数组对象 arr 为例,向arr[]中传入数组作为参数,所以才有了两个中括号

在机器学习中常通过使用花式索引来打乱数据集的样本顺序,避免机器学习模型学习到样本的位置噪声,对于监督学习的数据集如果打乱了样本还需要打乱相对应的标签值,样本与标签都是一一对应的关系,使用花式索引能够轻松的解决。

注意,这里有一个问题:

arr = np.arange(12).reshape((3,4))
print(arr[[0,2]])

Out:

[[ 0  1  2  3]
[ 8  9 10 11]]

换一个写法,将 reshape 拆开,无法得到想要的结果(尚不知具体原因):

arr.reshape() 本身不会改变arr,而是得到改变形状后的一个返回值,这就是原因。——2023.7.11

科学计算库—numpy随笔
这个写法又有一种补救(2023-5-16):

d = np.arange(12)
print(d.reshape(3,4)[[0,2]])

要用花式索引,不要让reshape方法‘’单着‘’

Out:

[[ 0  1  2  3]
 [ 8  9 10 11]]

8.1.8、numpy 比较运算

names = np.array(['名字1','名字2','名字3'])
sex = np.array(['M','F'])

这里举几个 and、or 的例子:

(names == '名字4') & (sex == 'M')

Out:array([False, False, False])

(names == '名字1') | (names == '名字5')

Out:array([ True, False, False])

8.1.9、numpy 如何指定行列?

arr = np.arange(16)

以 arr 为例,整成 4行4列:

arr.reshape(4,4)

Out:

array([[ 0,  1,  2,  3],
 [ 4,  5,  6,  7],
 [ 8,  9, 10, 11],
 [12, 13, 14, 15]])

8.1.10、numpy 如何转置?

比 list 强大之处,举个例子:

arr = np.arange(24).reshape((3,8))
arr.T#转置

Out:

array([[ 0,  8, 16],
 [ 1,  9, 17],
 [ 2, 10, 18],
    [ 3, 11, 19],
    [ 4, 12, 20],
    [ 5, 13, 21],
    [ 6, 14, 22],
    [ 7, 15, 23]])

补充:

轴转置

arr 为三维矩阵,初始时刻存在的三个轴下标分别0、1、2,基于下标完成轴转置,如下图:

科学计算库—numpy随笔

8.1.11、numpy where 函数

res = [x if c else y for x,y,c in zip(x_arr,y_arr,conditon)]#list对象
res = np.array(res)#numpy对象

等价表示

res = np.where(condition,x_arr,y_arr) #返回numpy对象

若条件 condition 成立,取 x_arr,否则取 y_arr

8.1.12、 numpy 如何值替换?

arr = np.random.randn(4,4)# 4*4随机矩阵

利用8.1.11提到的where函数,实现值替换,举个例子,将正数替换为5,负数为-5:

arr = np.where(arr>0,5,-5)

8.1.13、numpy 数学运算

1)生成随机矩阵

例如生成一个4*4随机矩阵:

arr = np.random.randn(4,4)

随机矩阵生成,数据源有两种,

np.random.rand()
np.random.randn()

rand() :取值从0,1之间的均匀分布中抽样。

randn():取值从以0为均值,1为方差的标准正态分布中抽样。

例如,生成4 * 4 随机矩阵,

arr = np.random.randn(4,4)# 4*4随机矩阵
print(arr)
arr = np.random.rand(4,4)# 4*4随机矩阵
print(arr)

Out:

[[-0.38672283  0.2510875   0.84164035 -1.171516  ]
[-0.34456511 -1.43556016  0.78061698  0.68466033]
[-1.05684828  0.66353918 -0.16626838 -1.0837476 ]
[-0.54743772 -0.70599557 -0.24332244 -0.18156644]]
[[0.63981419 0.56708754 0.03062314 0.77049354]
[0.79681395 0.12707638 0.05749961 0.21459898]
[0.62925634 0.10423857 0.47172718 0.57837616]
[0.68260032 0.54003265 0.57571165 0.50320049]]

2)平均值、求和

怎么确定 axis 方向?

科学计算库—numpy随笔

以 arr 对象为例:

arr.mean()#对所有元素
arr.mean(axis = 0)#0轴沿着行的方向垂直向下运算
arr.mean(axis = 1)#1轴沿着列的方向水平延伸运算
arr.sum()

3)排序

以 arr 对象为例:

arr.sort()返回的是原数组的“视图”,而不是 copy

np.sort(arr)返回的是原数组的 copy, 而不是“视图”,当有保留原 arr 需求时用这个文章来源地址https://www.toymoban.com/news/detail-430854.html

到了这里,关于科学计算库—numpy随笔的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入探索NumPy:科学计算利器的常用函数大全【第86篇—NumPy常用函数大全】

    在数据科学和机器学习领域,NumPy(Numerical Python)模块是Python中最常用的科学计算库之一。它提供了丰富的功能,包括数组操作、数学函数、统计方法等,为数据处理和分析提供了强大的工具。本文将重点介绍NumPy模块中常用的函数,涵盖字符串处理、数学运算、算术操作、

    2024年02月20日
    浏览(33)
  • 在科学计算领域独领风骚,NumPy书写辉煌传奇

    在数字世界的边缘,有一座神奇的城市,这座城市由无数个数据点和向量构成,街道上流淌着数不清的数组和矩阵。在城市的中心,耸立着一座巨大的科学计算塔,它的外墙是由数学符号和代码构成,散发着闪烁的数字光芒。城里的居民们穿梭于数组的巷道间,驾驭着向量的

    2024年03月24日
    浏览(32)
  • python库,科学计算与数据可视化基础,知识笔记(numpy+matplotlib)

    这篇主要讲一下数据处理中科学计算部分的知识。 之前有一篇pandas处理数据的。 讲一下这几个库的区别。 Pandas主要用来处理类表格数据(excel,csv),提供了计算接口,可用Numpy或其它方式进行计算。 NumPy 主要用来处理数值数据(尤其是矩阵,向量为核心的),本质上是纯

    2024年02月02日
    浏览(35)
  • python实战应用讲解-【numpy科学计算】line_profiler模块(附python示例代码)

    目录   Numpy 安装line_profiler 准备工作 具体步骤 Numpy 用line_profiler分析代码 具体步骤 攻略小结

    2023年04月08日
    浏览(35)
  • 数据科学中的Python:NumPy和Pandas入门指南【第121篇—NumPy和Pandas】

    数据科学是当今数字时代中的一个重要领域,而Python是数据科学家们最喜爱的编程语言之一。在这篇博客中,我们将介绍Python中两个强大的库——NumPy和Pandas,它们在数据处理和分析中发挥着重要作用。 NumPy是用于科学计算的基础包,提供了高性能的多维数组对象( numpy.nda

    2024年03月15日
    浏览(84)
  • JAX: 快如 PyTorch,简单如 NumPy - 深度学习与数据科学

    JAX 是 TensorFlow 和 PyTorch 的新竞争对手。 JAX 强调简单性而不牺牲速度和可扩展性。由于 JAX 需要更少的样板代码,因此程序更短、更接近数学,因此更容易理解。 长话短说: 使用 import jax.numpy 访问 NumPy 函数,使用 import jax.scipy 访问 SciPy 函数。 通过使用 @jax.jit 进行装饰,可

    2024年02月03日
    浏览(43)
  • 【Verilog语法013】verilog多维数组(多维矩阵)的写法

    有两种表示方法:一种是verilog语法的多维数组,另一种是system verilog语法的多维数组。 reg [A1:A0] a [B1:B0] [C1:C0] [D1:D0] ; 引用顺序是:a[B][C][D][A], 定义的a 的左边只有位宽,一对方括号[],a的右边可以扩展维数,多对方括号[],变化速度:BCDA packed维度: packed数组是一种将1个向量

    2024年02月08日
    浏览(29)
  • C++ 获取数组大小、多维数组操作详解

    要获取数组的大小,可以使用 sizeof() 运算符: 示例 结果: 为什么结果显示为 20 而不是 5,当数组包含 5 个元素时? 这是因为 sizeof() 运算符返回类型的大小(以字节为单位)。 要找出数组有多少个元素,必须将数组的大小除以它包含的数据类型的大小: 示例 结果: 然而,

    2024年04月10日
    浏览(32)
  • 漏斗分析、 python学习路径地图、数据科学技能书知识地图、数据安全治理解决方案、AIGC发展研究、经营的本质…| 本周精华...

    ▲ 点击上方卡片关注我,回复“8”,加入数据分析·领地, 一起学习数据分析,持续更新数据分析学习路径相关资料~ (精彩数据观点、学习资料、数据课程分享、读书会、分享会等你一起来乘风破浪~ )回复“小飞象”,领取数据分析知识大礼包。 关注微信公众号: 木木

    2024年02月11日
    浏览(30)
  • 【C语言】数组的声明和使用(一维数组、多维数组、字符数组)

    C语言支持数组数据结构,是用来存储固定大小的相同类型元素的顺序集合,往往被认为是一系列相同类型的变量。 特点: 有序数据的集合。 数组内所有元素类型相同。 所有的数组都是由连续的内存位置组成,最低的地址对应第一个元素,最高的地址对应最后一个元素。 数

    2024年02月16日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包