NumPy 数组复制与视图详解

NumPy 数组的复制与视图

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

复制

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

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

arr.copy():创建一个新的数组,该数组包含与原始数组相同元素的副本。 np.array(arr):将数组转换为新的 NumPy 数组。 arr[:]:使用切片创建整个数组的副本。

示例:

1import numpy as np 2 3arr = np.array([1, 2, 3, 4, 5]) 4 5# 创建副本 6copy = arr.copy() 7 8# 修改副本 9copy[2] = 100 10 11# 打印原始数组和副本 12print(arr) 13print(copy)

输出:

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

视图

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

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

arr.view():创建一个新的数组,该数组是原始数组数据的视图。 arr[start:end]:使用切片创建原始数组的视图。 arr.reshape():改变数组的形状,但不改变底层数据。

示例:

1import numpy as np 2 3arr = np.array([1, 2, 3, 4, 5]) 4 5# 创建视图 6view = arr.view() 7 8# 修改视图 9view[2] = 100 10 11# 打印原始数组和视图 12print(arr) 13print(view)

输出:

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

检查数组是否拥有数据

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

示例:

1import numpy as np 2 3arr = np.array([1, 2, 3, 4, 5]) 4 5copy = arr.copy() 6view = arr.view() 7 8print(copy.base) # None 9print(view.base) # <ndarray object at 0x00000222588287E0>

练习

使用以下代码创建数组 arr

1import numpy as np 2 3arr = 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 数组的形状。它返回一个元组,其中每个元素表示相应维度的长度。

示例:

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

输出:

1(2, 3)

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

形状元组的含义

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

2 个行 3 列 每个元素 4 个值

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

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

示例:

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

输出:

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

练习

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

一个包含 10 个元素的一维数组。 一个包含 5 行 4 列的二维数组。 一个包含 2 x 3 x 2 的三维数组。

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

最后

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

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

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

点赞
收藏

评论区

加载中...

相关推荐

java学习_5_21

数组的插入、删除、扩容本质上都是用的数组的复制。Java中数组的拷贝如下:System.arraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength)1publicclassArrayCopy1{2publicstaticv

Java中的数组(Array)

数组对于每一门编程语言来讲都是最重要的数据结构之一,当然不同的编程语言对数组的实现以及处理也不尽相同。数组的概念:把有限个相同类型元素变量放在一个整体,这个整体就叫做数组。数组中的每一个元素被称为数组元素,通常可以通过数组元素的索引(也叫下标,可以理解为一种编号,从0开始)来访问数组元素,包括数组元素的赋值(set)和取值(get)。

C语言自学《五》

什么是数组数组是一组数目固定、类型相同的数据项数组中的数据称为元素比如longnumbers\10\;方括号中的数字定义了要存放在数组中的元素个数,称为数组维度数组有一个类型,它组合了元素的类型和数组中的元素个数,因此如果两个数组的元素个数、类型相同,这两个数组的类型就相同可以在数组名称后的方括号内使用索引值,索引值是从0开始

NumPy 数组创建方法与索引访问详解

NumPy创建数组NumPy中的核心数据结构是ndarray,它代表多维数组。NumPy提供了多种方法来创建ndarray对象,包括:使用array()函数array()函数是最常用的方法之一,它可以将Python列表、元组甚至其他数组转换为ndarray

NumPy 数组切片及数据类型介绍

NumPy数组切片NumPy数组切片用于从数组中提取子集。它类似于Python中的列表切片,但支持多维数组。一维数组切片要从一维数组中提取子集,可以使用方括号并指定切片。切片由起始索引、结束索引和可选步长组成,用冒号:分隔。语法:pythonarrs

NumPy 数组迭代与合并详解

NumPy数组迭代NumPy数组迭代是访问和处理数组元素的重要方法。它允许您逐个或成组地遍历数组元素。基本迭代我们可以使用Python的基本for循环来迭代NumPy数组。一维数组迭代:pythonimportnumpyasnparrnp.array(1