【numpy基础】--基础操作

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

numpy作为一个强大的数值计算库,提供了对多维数组的很多便捷操作。
承接上一篇数组的创建,本篇主要介绍一些数组的基本操作。

1. 子数组

首先介绍获取子数组的方法,提取已有数据的一部分来参与计算是比较常用的功能。

对于一维数组,提取子数组:arr[start:stop:step]

  1. start:从哪个下标开始(下标从 0 开始)
  2. stop:到哪个下标结束(下标不包括 stop 这个值)
  3. step:间隔几个元素
arr = np.array(range(10))  # 生成 0~9 10个元素
print(arr[::2]) # 偶数
print(arr[1::2]) # 奇数
print(arr[1:6:2]) # 前六个数中的奇数
print(arr[::-1]) # 逆序

#运行结果
[0 2 4 6 8]
[1 3 5 7 9]
[1 3 5]
[9 8 7 6 5 4 3 2 1 0]

对于多维数组,同样可以使用上面的方式,数组有几维,就可以使用几次 start:stop:step
比如下面的二维数组:

arr = np.array([range(6), range(1, 7),
                range(2, 8), range(3, 9),
                range(4, 10)])
print(arr)
#运行结果
[[0 1 2 3 4 5]
 [1 2 3 4 5 6]
 [2 3 4 5 6 7]
 [3 4 5 6 7 8]
 [4 5 6 7 8 9]]

print(arr[::2, ::2])
#运行结果
[[0 2 4]
 [2 4 6]
 [4 6 8]]

也就是按行取第 1,3,5行,然后按列取第 1,3,5列。

2. 数组副本

当我们提取子数组之后,如果对子数组进行修改,那么原始的数组也会变化。
这个因为数组是引用类型,当数组的数据量很大的时候,内存占用会比较低。
比如:

arr = np.array(range(5))
arr2 = arr[::2]
arr2[2] = 99

print(arr)
#运行结果
[ 0  1  2  3 99]

print(arr2)
#运行结果
[ 0  2 99]

子数组修改之后,原始数组也改变了。

如果要避免修改原始数组,就要建立子数组的副本,也就是 copy 方法。

arr = np.array(range(5))
arr2 = arr[::2].copy() # 通过copy方法建立副本
arr2[2] = 99

print(arr)
#运行结果
[0 1 2 3 4]

print(arr2)
#运行结果
[ 0  2 99]

3. 数组变形

进行数据分析时,我们常常得到的是线性的数据序列,也就是一维数组,
numpy中,从一维变到多维非常方便。

#一维变多维
arr = list(range(9))
print(arr)
#运行结果
[0, 1, 2, 3, 4, 5, 6, 7, 8]

arr = np.array(arr).reshape((3, 3))
print(arr)
#运行结果
[[0 1 2]
 [3 4 5]
 [6 7 8]]

注意,变换前后元素的总数量要一直,比如上面的例子中,
变换前一维数组有9个元素,变换成 3x3 的二维数组,也是9个元素。
如果变换成 3x4 或者 2x3 的二维数组,就会出错。

除了二维数组,变成三维数组也一样:

arr = np.array(range(24)).reshape((2, 3, 4))

print(arr)
#运行结果
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]

4. 拼接和拆分

最后一个基本操作是数组的拼接拆分

4.1. 拼接

拼接有两个方向,水平拼接和垂直拼接,拼接的数组个数不限。
比如,下面的示例是3个数组拼接在一起。

arr1 = np.array([range(1, 4),
                 range(1, 4),
                 range(1, 4)])
arr2 = np.array([range(4, 7),
                 range(4, 7),
                 range(4, 7)])
arr3 = np.array([range(7, 10), 
                 range(7, 10),
                 range(7, 10)])

arr = np.concatenate([arr1, arr2, arr3])
print(arr)
#运行结果
[[1 2 3]
 [1 2 3]
 [1 2 3]
 [4 5 6]
 [4 5 6]
 [4 5 6]
 [7 8 9]
 [7 8 9]
 [7 8 9]]

arr = np.concatenate([arr1, arr2, arr3], axis=1)
print(arr)
#运行结果
[[1 2 3 4 5 6 7 8 9]
 [1 2 3 4 5 6 7 8 9]
 [1 2 3 4 5 6 7 8 9]]

concatenate 函数用来拼接数组,默认是垂直方向拼接,设置 axis=1,按照水平方向拼接。

如果觉得记参数麻烦,记不住哪个是水平拼接,哪个是垂直拼接,还有两个专门拼接的函数,
vstack(垂直拼接)和hstack(水平拼接)。

arr = np.vstack([arr1, arr2, arr3])
print(arr)
#运行结果
[[1 2 3]
 [1 2 3]
 [1 2 3]
 [4 5 6]
 [4 5 6]
 [4 5 6]
 [7 8 9]
 [7 8 9]
 [7 8 9]]

arr = np.hstack([arr1, arr2, arr3])
print(arr)
#运行结果
[[1 2 3 4 5 6 7 8 9]
 [1 2 3 4 5 6 7 8 9]
 [1 2 3 4 5 6 7 8 9]]

4.2. 拆分

拆分数组时,通过设置拆分点的下标,可以将数组拆分成任意长短的多个数组。
比如:

arr = np.array(range(1, 10))
arr1 = np.split(arr, [1, 5]) # 在下标 1 和 5 的地方拆分
print(arr1)
#运行结果
[array([1]), array([2, 3, 4, 5]), array([6, 7, 8, 9])]

上面的示例中,下标1对应的值是2下标5对应的值是6
2个拆分点,所以拆分成3个数组

同样,数组的拆分也有2个简便的方法:vsplithsplit
拆分多维数组时,可以按照垂直和水平两个方向拆分。

arr = np.array(range(1, 10)).reshape((3, 3))
print(arr)
#运行结果
[[1 2 3]
 [4 5 6]
 [7 8 9]]

print(np.vsplit(arr, [1]))
#运行结果
[array([[1, 2, 3]]), 
 array([[4, 5, 6],
       [7, 8, 9]])]

print(np.hsplit(arr, [1]))
#运行结果
[array([[1],
       [4],
       [7]]), 
 array([[2, 3],
       [5, 6],
       [8, 9]])]

垂直拆分时,拆分点是下标1的行,也就是从第二行开始拆分。
水平拆分时,拆分点是下标1的列,也就是从第二列开始拆分。

超过二维的数组也可以 vsplithsplit,只是结果看上去没那么直观。

5. 总结回顾

本篇主要介绍的是numpy数组的基本操作,包括:

  1. 提取子数组
  2. 创建数组副本
  3. 数组变形
  4. 拼接和拆分

这些基本操作是进行实际的数值计算前经常会使用到的。文章来源地址https://www.toymoban.com/news/detail-492117.html

到了这里,关于【numpy基础】--基础操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Python Numpy入门基础(二)数组操作

    NumPy是Python中一个重要的数学运算库,它提供了了一组多维数组对象和一组用于操作这些数组的函数。以下是一些NumPy的主要特点: 多维数组对象:NumPy的核心是ndarray对象,它是一个多维数组对象,可以容纳任意数据类型。 矢量化操作:使用NumPy的函数,可以对整个数组进行

    2024年02月15日
    浏览(44)
  • 精通 NumPy 数值分析:6~10

    原文:Mastering Numerical Computing With NumPy 协议:CC BY-NC-SA 4.0 译者:飞龙 到目前为止,您应该能够使用 NumPy 编写小型实现。 在整个章节中,我们旨在提供使用其他库的示例,在本章中,我们应退后一步,看看可以与 NumPy 一起用于项目的周围库。 本章将介绍其他 Python 库如何对

    2023年04月14日
    浏览(30)
  • 【Python 零基础入门】Numpy 常用函数 数组操作 & 数学运算

    Numpy (Numerical Python) 是 Python 编程语言的一个扩展程序库, 支持大量的维度数组与矩阵运算, 并提供了大量的数学函数库. Numpy 利用了多线程数组来存储和处理大型数据集, 从而提供了一个高效的方式来进行数值计算, 特别是对于矩阵预算和线性代数. np.assarray 可以将输入转换为

    2024年02月05日
    浏览(46)
  • 一个超级大的文件如何更快读

    问题起因 一个有千万的数据的txt文件如何发挥IO的全部性能更快的读和写。 使用ChatGPT4的方案 在C#中,我们可以使用多线程来处理大量的数据并将其写入数据库。在处理大数据时,我们需要将任务分解为多个子任务,这样我们可以在不同的线程中并行执行它们以提高性能。

    2024年02月08日
    浏览(35)
  • 【微信小程序】使用button组件来实现一个带有点击效果的按钮,按钮中间添加一个大的+号图标

    在微信小程序中,你可以使用 button 组件来实现一个带有点击效果的按钮,并在按钮中间添加一个大的+号图标。以下是一个示例代码: 在上述代码中,我们使用了微信小程序的 button 组件,并在其中添加了一个 text 组件,文本内容为+号。使用类名为 button 的样式设置了按钮的

    2024年02月16日
    浏览(61)
  • 【Flink】Flink 记录一个 checkpoint 检查点 越来越大的问题

    Flink SQL checkpoint越来越大咋么办,从2个G,现在4个G了,增量同步的,窗口是1小时,watermark是6小时,按道理来说,数据量不应该越来越大啊? 在窗口内执行了count(distinct )这些操作。设置了状态的ttl。后端状态存储用的rocksdb。 状态如下 设置了增量的检查点 代码设置不一定有

    2024年02月10日
    浏览(47)
  • 【数据结构与算法】分别以邻接矩阵和邻接表作为存储结构实现以下操作:1.增加一个新顶点v、2.删除顶点v及其相关的边、3.增加一条边<v,w>、4.删除一条边<v,w>

       Qestion:   分别以邻接矩阵和邻接表作为存储结构,实现以下图的基本操作 增加一个新顶点v, InsertVex(G, v) ; 删除顶点v及其相关的边, DeleteVex(G, v) ; 增加一条边v,w, InsertArc(G, v, w) ; 删除一条边v,w, DeleteArc(G, v, w) 。 因为要分别用邻接表和邻接矩阵来完成上述四个算

    2024年02月05日
    浏览(60)
  • 【leetcode题解C++】34.在排序数值中查找第一个和最后一个位置

    给你一个按照非递减顺序排列的整数数组  nums ,和一个目标值  target 。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值  target ,返回  [-1, -1] 。 你必须设计并实现时间复杂度为  O(log n)  的算法解决此问题。 示例 1: 示例 2: 示例 3: 思路

    2024年01月16日
    浏览(39)
  • 机器人中的数值优化|【一】数值优化基础

    凸集的定义 令X是线性空间。如果对于X的子集S中的所有x和y,并且在区间 [0,1]中的所有t,点 ( 1 − t ) x + t y (1-t)x + ty ( 1 − t ) x + t y 也属于S,则S称为凸集。 不失一般性,对于所有的凸集,其线性组合点都位于凸集内部: ∑ θ i x i ∈ X ∑ θ i = 1 , θ i ≥ 0 , ∀ θ i sum theta_

    2024年02月09日
    浏览(39)
  • 作为「码农」的第一个十年

    如果从上大学, 闭门造车似地捣鼓ActionScript3开始, 已经写了10年代码了. AS3 Java、Struts2、Hibernate、HTML、Javascript、CSS、SVN、Git、SQL Server、MySQL、Android Linux、PHP、ThinkPHP、Cavy、SQLite、Angular1.x、Python、Django、Postgres、Vue2、Webpack、Hive、Docker、Go、GraphQL、Flutter、WebAssembly React、Typesc

    2024年02月08日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包