哪些 numpy 操作是复制的,哪些是变异的?

2024-01-12

是否有通用的经验法则来了解哪些操作numpy.ndarray产生一个copy哪些值会就地改变它们?

我对 numpy 还很陌生,我确信我最终会以艰难的方式学习,但我想知道是否存在驱动可变性的一般原则,可以帮助加快我的学习速度。


原地变异的函数

相对较少的 numpy 函数就地变异。在大多数情况下,numpy 函数在可以时返回数组视图,在不能时返回数组视图。

这是一份详尽的清单(来自the docs https://docs.scipy.org/doc/numpy-1.15.4/numpy-user-1.15.4.pdf) 就地变异的函数/方法:

  • ndarray.resize
  • ndarray.sort
  • 所有就地二元运算符(例如+=, *=, ^=, etc)
  • numpy.fill_diagonal
  • numpy.random.shuffle
  • ndarray.partition

这是可以选择就地变异的函数/方法的列表:

  • ndarray.byteswap
  • numpy.nan_to_num

某些赋值也会就地改变数组。您可以通过分配给切片来更改数组中的值(例如arr[...] = 1将数组中的每个值设置为1),并且您可以通过直接分配新形状来重塑数组.shape, eg arr.shape = (2,3)(并不总是有效,请参阅注释here https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.reshape.html#numpy-reshape).

还有一些功能支持out关键字参数。如果您传递相同的数组作为输入和变量,这些函数将充当变异器out.

公平警告,我可能错过了文档中没有明确标记的一两个突变器。无论如何,这个列表很短,所以没有太多需要记住的东西。

关于查看与复制返回值的注释

过去几年 numpy 开发人员的目标之一似乎是让 numpy 函数和ndarray方法返回视图而不是副本。此时,可以相当安全地假设如果 numpy 函数/方法can返回一个视图,默认情况下会这样做。

例如,ndarray.flatten and ndarray.ravel做同样的事情(返回一个扁平数组)。但是,那文档用于ndarray.flatten https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.ndarray.flatten.html#numpy-ndarray-flatten明确表示它将返回一个副本,而文档用于ndarray.ravel https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.ndarray.ravel.html#numpy-ndarray-ravel说只有在绝对必要时才会返回副本。

在实时代码中,根据经验,您始终可以通过比较操作来检查操作是否生成视图或副本id of the .base你的结果到id的原始数组。例如:

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

arrflat = arr.flatten()
assert arrflat.base is not arr

arrravel = arr.ravel()
assert arrravel.base is arr
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哪些 numpy 操作是复制的,哪些是变异的? 的相关文章

  • 小/大 numpy 数组的释放处理方式是否不同?

    我正在尝试调试我的大型 Python 应用程序的内存问题 大部分记忆都在numpy由Python类管理的数组 所以Heapy http guppy pe sourceforge net 等等都是无用的 因为它们不占内存numpy数组 因此
  • Pandas 用单位插值数据

    大家好 几年来我一直在寻找 Stackoverflow 它对我帮助很大 以至于我以前不需要注册 但今天我遇到了一个使用 Python 与 Pandas 和 Quantities 也可能是 unum 或 pint 的问题 我尽力发表清晰的帖子
  • 使用 numpy.distutils.core.setup 之前安装 numpy

    我在用numpy distutils设置具有 fortran 模块的包 mypackage 问题是如果我这样做pip install mypackage在没有 numpy 的环境中 出现以下错误 ModuleNotFoundError 没有
  • 内存高效的随机数迭代器,无需替换

    我觉得这应该很容易 但经过多次搜索和尝试后我找不到答案 基本上 我有大量的物品 我想以随机顺序进行采样 而不需要更换 在本例中 它们是二维数组中的单元 我用于较小数组的解决方案不会转换 因为它需要对内存数组进行改组 如果我必须采样的数量很小
  • 如何在 ndarray 内创建一个球体? [复制]

    这个问题在这里已经有答案了 我有一个 ndarray 大小32x32x32 我想在数组内创建一个球体 其中心位于 x y 半径为 4 像素 球体的值为 1 而数组的值为 0 这如何在 python 中完成 这是生成数组的代码 import
  • 如何使用 Python Gekko 求解绝对值 abs() 目标?

    使用 Python Gekko 中的 IPOPT 成功解决了具有平方目标的优化问题 from gekko import GEKKO import numpy as np m GEKKO x m Var y m Param 3 2 m Obj
  • 绘制到图像对象

    我可以保存一个图imshow 因为它返回一个图像对象 如下所示 image plt imshow list interpolation None 后来我想创建其中许多图像的动画 将其保存在列表中并将其渲染为视频 如果这种方法很愚蠢 请告诉我
  • 计算矩阵乘法的子集

    当我有两个非稀疏矩阵时A and B 有没有一种方法可以有效地计算C A T dot B 当我只想要元素的子集时C 我有所需的指数C以指定的CSC格式存储here http docs scipy org doc scipy referenc
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 如何在保留矩阵维度的同时序列化 numpy 数组?

    numpy array tostring似乎没有保留有关矩阵维度的信息 请参阅这个问题 https stackoverflow com q 30697769 1156707 要求用户发出调用numpy array reshape 有没有办法
  • 如何从文件中读取两行并在 for 循环中创建动态键,后续

    这个问题紧接着所讨论的问题 如何从文件中读取两行并在 for 循环中创建动态键 https stackoverflow com q 41929351 868546 但是 问题的本质已经发展到我想要解决的某种复杂性 下面是我的数据结构 用空格
  • pyCUDA无法打印结果

    最近 我使用 pip 为我的 python3 4 3 安装 pyCUDA 但我在测试示例代码时发现 https documen tician de pycuda tutorial html getting started https doc
  • 如何从邻接表高效创建稀疏邻接矩阵?

    我正在与last fm http labrosa ee columbia edu millionsong lastfm数据集来自百万歌曲数据集 http labrosa ee columbia edu millionsong 数据以一组 j
  • 如何将特定范围内的标量添加到 numpy 数组?

    有没有一种更简单 更节省内存的方法可以单独在 numpy 中执行以下操作 import numpy as np ar np array a l r ar c a a 0 l ar tolist a r 它可能看起来很原始 但它涉及获取给定数
  • 重新分配唯一值 - pandas DataFrame

    我在尝试着assign unique值在pandas df给特定的个人 For the df below Area and Place 会一起弥补unique不同的价值观jobs 这些值将分配给个人 总体目标是使用尽可能少的个人 诀窍在于这
  • python numpy savetxt

    有人可以指出我在这里做错了什么吗 import numpy as np a np array 1 2 3 4 5 dtype int b np array a b c d e dtype S1 np savetxt test txt zip
  • 2 列 pandas 上的地图

    我有一个数据框 如下所示 Col1 Col2 0 A PY 1 B PA 2 C PB 3 B PB 以及这个系列 Value Col1 Col2 A PY 20 B PB 30 我想做一个映射 如果该系列有一个索引 仅前 Col1 那么它
  • Numpy 沿轴最大值

    我在这里错过了什么吗 我希望np max在下面的代码片段中将返回 0 4 gt gt gt a array 1 2 0 4 gt gt gt np max a axis 0 array 1 4 感谢您的指点 看起来您想要包含最大值的行 对吧
  • 使用 Scipy imsave 将 Numpy 数组保存到图像时保留未更改的数据

    使用 Scipy 保存二维 Numpy 数组 单个值 时toimage or imsave像素值与 Numpy 数组中的像素值不完全匹配 相反 在某些区域 主要是边缘 图像算法似乎使用某种插值 是否有一个选项可以停止插值并保留准确的数据 例
  • numpy.cov() 返回意外的输出

    我有一个 X 数据集 有 9 个特征和 683 行 683x9 我想获取这个 X 数据集和另一个与 X 具有相同形状的数据集的协方差矩阵 我使用np cov originalData generatedData rowvar False 代

随机推荐