NumPy 数组复制与视图详解

打印 上一主题 下一主题

主题 943|帖子 943|积分 2833

NumPy 数组的复制与视图

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

复制 会创建一个包罗原始数组雷同元素的新数组,但这两个数组拥有独立的内存空间。这意味着对复制进行的任何更改都不会影响原始数组,反之亦然。
创建副本可以使用以下方法:
arr.copy():创建一个新的数组,该数组包罗与原始数组雷同元素的副本。
np.array(arr):将数组转换为新的 NumPy 数组。
arr[:]:使用切片创建整个数组的副本。
示例:
  1. import numpy as np
  2. arr = np.array([1, 2, 3, 4, 5])
  3. # 创建副本
  4. copy = arr.copy()
  5. # 修改副本
  6. copy[2] = 100
  7. # 打印原始数组和副本
  8. print(arr)
  9. print(copy)
复制代码
输出:
  1. [ 1  2  3  4  5]
  2. [ 1  2 100  4  5]
复制代码
视图

视图 是对原始数组数据的引用,不拥有独立的内存空间。这意味着对视图进行的任何更改都会直接反映在原始数组中,反之亦然。
创建视图可以使用以下方法:
arr.view():创建一个新的数组,该数组是原始数组数据的视图。
arr[start:end]:使用切片创建原始数组的视图。
arr.reshape():改变数组的形状,但不改变底层数据。
示例:
  1. import numpy as np
  2. arr = np.array([1, 2, 3, 4, 5])
  3. # 创建视图
  4. view = arr.view()
  5. # 修改视图
  6. view[2] = 100
  7. # 打印原始数组和视图
  8. print(arr)
  9. print(view)
复制代码
输出:
  1. [ 1  2 100  4  5]
  2. [ 1  2 100  4  5]
复制代码
查抄数组是否拥有数据

我们可以使用 arr.base 属性来查抄数组是否拥有其数据。如果 arr.base 为 None,则数组拥有自己的数据,否则它是一个视图。
示例:
  1. import numpy as np
  2. arr = np.array([1, 2, 3, 4, 5])
  3. copy = arr.copy()
  4. view = arr.view()
  5. print(copy.base)  # None
  6. print(view.base)  # <ndarray object at 0x00000222588287E0>
复制代码
训练

使用以下代码创建数组 arr:
  1. import numpy as np
  2. 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 数组的形状。它返回一个元组,此中每个元素表示相应维度的长度。
示例:
  1. import numpy as np
  2. # 创建一个二维数组
  3. arr = np.array([[1, 2, 3], [4, 5, 6]])
  4. # 获取数组形状
  5. print(arr.shape)
复制代码
输出:
  1. (2, 3)
复制代码
这意味着数组包罗 2 行和 3 列。
形状元组的含义

形状元组中的每个元素表示相应维度的长度。比方,如果形状为 (2, 3, 4),则数组具有:
2 个行
3 列
每个元素 4 个值
使用 ndmin 创建具有特定形状的数组

我们可以使用 ndmin 参数来创建具有指定形状的新数组,即使原始数据不具有该形状。ndmin 参数指定要创建的最小维度数。如果原始数据具有比 ndmin 更高的维度,则形状将保留。如果维度数不足,则将添加新维度,并用 1 添补元素。
示例:
  1. import numpy as np
  2. # 使用 ndmin=5 创建一个包含值 1,2,3,4 的向量
  3. arr = np.array([1, 2, 3, 4], ndmin=5)
  4. print(arr)
  5. print(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,关注后即可获取最新文章推送
看完如果觉得有资助,接待点赞、收藏、关注

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

东湖之滨

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表