NumPy 数组的复制与视图

NumPy 数组的复制和视图是两种不同的方式来创建新数组,它们之间存在着重要的区别。

复制

复制 会创建一个包含原始数组相同元素的新数组,但这两个数组拥有独立的内存空间。这意味着对复制进行的任何更改都不会影响原始数组,反之亦然。

创建副本可以使用以下方法:

arr.copy():创建一个新的数组,该数组包含与原始数组相同元素的副本。

np.array(arr):将数组转换为新的 NumPy 数组。

arr[:]:使用切片创建整个数组的副本。

示例:

import numpy as np

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

# 创建副本
copy = arr.copy() # 修改副本
copy[2] = 100 # 打印原始数组和副本
print(arr)
print(copy)

输出:

[ 1  2  3  4  5]
[ 1 2 100 4 5]

视图

视图 是对原始数组数据的引用,不拥有独立的内存空间。这意味着对视图进行的任何更改都会直接反映在原始数组中,反之亦然。

创建视图可以使用以下方法:

arr.view():创建一个新的数组,该数组是原始数组数据的视图。

arr[start:end]:使用切片创建原始数组的视图。

arr.reshape():改变数组的形状,但不改变底层数据。

示例:

import numpy as np

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

# 创建视图
view = arr.view() # 修改视图
view[2] = 100 # 打印原始数组和视图
print(arr)
print(view)

输出:

[ 1  2 100  4  5]
[ 1 2 100 4 5]

检查数组是否拥有数据

我们可以使用 arr.base 属性来检查数组是否拥有其数据。如果 arr.baseNone,则数组拥有自己的数据,否则它是一个视图。

示例:

import numpy as np

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

copy = arr.copy()
view = arr.view() print(copy.base) # None
print(view.base) # <ndarray object at 0x00000222588287E0>

练习

使用以下代码创建数组 arr

import numpy as np

arr = np.array([10, 20, 30, 40, 50])

并使用以下方法创建 arr 的副本:

arr.copy()

np.array(arr)

arr[:]

在每个方法之后,打印原始数组和副本,并验证它们是否相等。

在评论中分享您的代码和结果。

Sure, here is the requested Markdown formatted content:

获取数组的形状

NumPy 数组的形状描述了数组中元素的组织方式,并由包含每个维度中元素数量的元组表示。

获取数组形状

可以使用 arr.shape 属性获取 NumPy 数组的形状。它返回一个元组,其中每个元素表示相应维度的长度。

示例:

import numpy as np

# 创建一个二维数组
arr = np.array([[1, 2, 3], [4, 5, 6]]) # 获取数组形状
print(arr.shape)

输出:

(2, 3)

这意味着数组包含 2 行和 3 列。

形状元组的含义

形状元组中的每个元素表示相应维度的长度。例如,如果形状为 (2, 3, 4),则数组具有:

2 个行

3 列

每个元素 4 个值

使用 ndmin 创建具有特定形状的数组

我们可以使用 ndmin 参数来创建具有指定形状的新数组,即使原始数据不具有该形状。ndmin 参数指定要创建的最小维度数。如果原始数据具有比 ndmin 更高的维度,则形状将保留。如果维度数不足,则将添加新维度,并用 1 填充元素。

示例:

import numpy as np

# 使用 ndmin=5 创建一个包含值 1,2,3,4 的向量
arr = np.array([1, 2, 3, 4], ndmin=5) print(arr)
print(arr.shape)

输出:

[[[[1 2 3 4]]]]
(1, 1, 1, 1, 4)

练习

创建以下形状的 NumPy 数组,并打印它们的形状:

一个包含 10 个元素的一维数组。

一个包含 5 行 4 列的二维数组。

一个包含 2 x 3 x 2 的三维数组。

在评论中分享您的代码和输出。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注

NumPy 数组复制与视图详解的更多相关文章

  1. GoLang基础数据类型--->数组(array)详解

    GoLang基础数据类型--->数组(array)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Golang数组简介 数组是Go语言编程中最常用的数据结构之一.顾名 ...

  2. ASP.NET MVC 5 学习教程:Edit方法和Edit视图详解

    原文 ASP.NET MVC 5 学习教程:Edit方法和Edit视图详解 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 ...

  3. 【译】ASP.NET MVC 5 教程 - 7:Edit方法和Edit视图详解

    原文:[译]ASP.NET MVC 5 教程 - 7:Edit方法和Edit视图详解 在本节中,我们继续研究生成的Edit方法和视图.但在研究之前,我们先将 release date 弄得好看一点.打 ...

  4. MySQL复制相关参数详解

    MySQL复制相关参数详解 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.复制相关系统变量 1>.server_id 是必须设置在master和每个slave上的唯一标 ...

  5. [转]PostgreSQL教程(十六):系统视图详解

    这篇文章主要介绍了PostgreSQL教程(十六):系统视图详解,本文讲解了pg_tables.pg_indexes.pg_views.pg_user.pg_roles.pg_rules.pg_set ...

  6. CorelDRAW中如何复制对象属性详解

    复制对象属性是一种比较特殊.重要的复制方法,它可以方便而快捷地将指定对象中的轮廓笔.轮廓色.填充和文本属性通过复制的方法应用到所选对象中.本教程将详解CorelDRAW中如何复制对象属性. Corel ...

  7. (转)oracle视图详解

    Oracle视图详解   一. 视图的定义 视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本身的定义语句还是要存储在数据字典里的.视图只有逻辑定义.每次使用的时候,只是重新执 ...

  8. 数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解

    数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接 ...

  9. Day17:稀疏数组的超细详解

    稀疏数组的超细详解 一个含有大量重复元素的二维数组,我们可以提取其有效元素,压缩空间,整合为一个稀疏数组. 例如一个五子棋棋盘,我们将棋盘看作为一个二维数组,没有棋子的位置为0:黑棋为1:白棋为2: ...

  10. calcite物化视图详解

    概述 物化视图和视图类似,反映的是某个查询的结果,但是和视图仅保存SQL定义不同,物化视图本身会存储数据,因此是物化了的视图. 当用户查询的时候,原先创建的物化视图会注册到优化器中,用户的查询命中物化 ...

随机推荐

  1. #前缀和,后缀和#洛谷 4280 [AHOI2008]逆序对

    题目传送门 分析 首先填的数字单调不降,感性理解 那可以维护\([a_1\sim a_{i-1}]\)的\(cnt\)后缀和以及 \([a_{i+1}\sim a_n]\)的\(cnt\)前缀和,那可 ...

  2. #网络流,树状数组#JZOJ 4020 Revolution with JZOJ 4018 Magic

    CF297E Mystic Carvings=JZOJ 4018 Magic JZOJ 4020 Revolution 题目 有一个\(n*m(n,m\leq 20)\)的网格图 这格子有收益当且仅当 ...

  3. #差分约束,Floyd#洛谷 2474 [SCOI2008]天平

    题目 分析 非传统差分约束?? 注意只有结果保证惟一的选法才统计在内 这就为差分约束提供了依据 以左边重为例,假设现在选择的砝码为\(i,j\), 那么\(\because A+B>i+j\th ...

  4. CMake 常用命令大全:提高项目构建效率

    CMake是一个跨平台.开源的构建工具,它可以自动生成Makefile或者Visual Studio等IDE的工程文件.它能够帮助开发者更方便地管理项目的构建过程,提高项目构建的效率.在本文中,我们将 ...

  5. 动态库 DLL 封装三:对dll二次封装,并将回调函数放出去,供别人调用

    背景: 我需要对一个dll进行二次封装,其中有一个接口,里面的参数需要传回调函数. 需求: 这个回调函数,我需要开放出去,让别人调用我的dll时,自己写这个回调函数 示例: // 回调原型 VOID ...

  6. openGauss数据库的安装与使用

    VMware+CentOS7.6+OpenGauss2.0.1 极简版安装 环境准备 Arch:x86-64 OS:Win11 VMware:16.1.2 安装 CentOS 7.6 CentOS 镜 ...

  7. css 去除浮动布局

    前言 在清楚浮动的时候呢,网上有7种,这里只介绍3种,小声哔哔,其他4种都有坑. 正文 第一种: <div class="container"> <div> ...

  8. golang开发 深入理解 context

    context的历史 context包在Go 1.7版本正式加入Go标准库.在加入之前我们看看Go团队核心成员Sameer Ajmani在2014年发表的一篇关于context介绍博客,地址:http ...

  9. React纯组件的使用

    1. 有无必要使用纯组件 如果应用不是很大型,页面渲染效率使用纯组件与非纯组件差别不大,尽量使用组件 应用一定注意,setState时子组件依赖渲染的属性一定要传递给子组件,不然父组件setState ...

  10. 对key值理解

    key相当于一种身份标识标识,就像我们的身份证用来辨识一个人一样. 每个key对应一个组件, 相同的key react会认为是同一个组件,这样后续相同的key对应组件都不会被创建.... 而有了key ...