numpy 中的数组切片

2023-12-25

今天我使用numpy数组进行一些计算,发现一个奇怪的问题,例如,假设我已经在Ipython中导入了numpy.arange,并且我运行了一些脚本,如下所示:

In [5]: foo = arange(10)                                                      

In [8]: foo1 = foo[arange(3)]                                                 

In [11]: foo1[:] = 0                                                          

In [12]: foo
Out[12]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [16]: foo2 = foo[0:3]                                                      

In [19]: foo2[:]=0                                                            

In [21]: foo
Out[21]: array([0, 0, 0, 3, 4, 5, 6, 7, 8, 9])

上面显示,当我按 foo[arange(3)] 切片数组时,我得到了数组切片的副本,但是当我按 foo[0:3] 切片数组时,我得到了数组切片的引用,因此foo 随 foo2 改变。然后我认为 foo 和 foo2 应该有相同的 id,但这似乎不是真的

In [59]: id(foo)
Out[59]: 27502608

In [60]: id(foo2)
Out[60]: 28866880

In [61]: id(foo[0])
Out[61]: 38796768

In [62]: id(foo2[0])
Out[62]: 38813248

...

更奇怪的是,如果我不断检查 foo 和 foo2 的 id,它们不是恒定的,有时,它们确实相互匹配!

In [65]: id(foo2[0])
Out[65]: 38928592

In [66]: id(foo[0])                                                          
Out[66]: 37111504

In [67]: id(foo[0])
Out[67]: 38928592

谁能解释一下吗?我对python的这个动态特性真的很困惑

多谢


foo[arange(3)]

不是切片。的要素arange(3)用于选择元素foo构造一个新数组。由于这无法有效地返回视图(视图的每个元素都必须是独立的引用,并且视图上的操作需要遵循太多的指针),因此它返回一个新数组。

foo[0:3]

是一个切片。这可以作为视图有效地完成;它只需要调整一些边界。因此,它返回一个视图。

id(foo[0])

foo[0]不引用特定的 Python 对象。为每个数组元素保留单独的 Python 对象成本太高,从而抵消了 numpy 的大部分优势。相反,当对 numpy ndarray 执行索引操作时,numpy 会构造一个新对象来返回。每次您都会获得具有不同 ID 的不同对象。

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

numpy 中的数组切片 的相关文章

随机推荐

  • 如何在没有互联网连接的情况下本地安装 NodeJS 项目?

    我有一个项目 必须将其部署到无法连接到互联网的客户端 Windows 系统 我目前在 D NODE 中有一个文件夹 其中包含 node exe 和 npm cmd 以及一个 node modules 文件夹 为了能够从命令行运行节点 我已将
  • .htaccess 文件的位置

    var www html My project folder 是我的项目的路径 我没有找到 htaccess 文件 我想粘贴我编辑的 htaccess 文件 但我不确定我需要放在哪个位置 我的 htaccess 文件代码是
  • Bash 脚本中的 SSH 搞乱了文件读取 [重复]

    这个问题在这里已经有答案了 我有一个脚本 可以逐行读取文件 并根据读取的内容执行操作 它所做的事情之一是通过 ssh 连接到远程服务器并获取一些信息 由于某种完全超出我能力范围的原因 这会停止从文件中读取行 该脚本本质上是 我已经删除了很多
  • 寻找Python字典中最大的键

    General 我需要帮助在 python 中找到一种方法来获得最大值N多维Python字典中的项目 例如 things car weight 100 apple weight 1 spanner weight 10 在这种情况下 我想找到
  • JavaFX WebView 进度始终从 0.0 到 1.0。 (无中间值)

    我目前正在使用 GluonHQ JavaFXPorts 开发一个应用程序 其中我使用 WebView 加载一些 Internet 页面 我注意到当我在桌面上使用以下代码时 webEngine getLoadWorker progressPr
  • undefined 不是一个对象(评估 'ImagePickerManager.showImagePicker')

    我正在尝试使用react native image picker 但卡在这里 它总是显示错误 如下图所示 undefined 不是一个对象 评估 ImagePickerManager showImagePicker 有人遇到过这个问题吗 我
  • 使用 Python 的函数返回值为 shell 变量赋值

    我有一个 Python 函数 fooPy 它返回一些值 整数 双精度或字符串 我想使用这个值并在 shell 脚本中分配它 例如以下是 python 函数 def fooPy return some string return 10 alt
  • 使用 API 通过 Nodejs 使用 Drive.files.copy 将 Word 文档转换为 Google 文档 在 Google Drive API v3 中进行转换

    我正在尝试通过 Node js 使用 API 将 Word 文档转换为 Google 文档 单词文档已经在一个文件夹中 我只想将它们转换为谷歌文档 我正在使用v3 The v3 docs https developers google co
  • PHP EOF 仅显示循环的一个结果

    我在 PHP 中使用 EOF 问题是它只显示来自 mySQL 循环的一项 它仅显示最后的结果 这在EOF中有必要吗 或者我可以避免这个问题吗 Thanks function getYiBAdminBanner global site glo
  • R try catch 块

    我正在尝试在循环中评估树的多个输出参数 但有时树功能会中止 这些行如何被 try catch 块包围 我很抱歉没有 真正的 代码 但我没有非工作树的示例 这是pseddo代码来说明当前的实现 for icol in seq 1 ncol c
  • 如何从纬度和经度找出地图瓦片坐标?

    我正在使用 Mapbox 矢量切片从后端进程收集特定数据 在示例中 他们提供了曼哈顿图块的链接 http a tiles mapbox com v3 examples map zr0njcqy 14 4823 6160 png http a
  • 如何在管道中使用导管下降功能?

    我有一个简单的任务 从文件中读取一堆行并对每一行执行一些操作 除了第一个 这是一些需要忽略的标题 所以我想我应该尝试一下管道 printFile src runResourceT CB sourceFile src CT decode CT
  • 有没有办法获得 dask 中每组最大的项目?

    我有以下数据集 location category percent A 5 100 0 B 3 100 0 C 2 50 0 4 13 0 D 2 75 0 3 59 0 4 13 0 5 4 0 我正在尝试获取数据框中按位置分组的最大类别
  • 使用别名覆盖内置命令

    我正在尝试创建一个覆盖的别名cd命令 这将在 真实 之前和之后执行一个脚本cd 这是我到目前为止所拥有的 alias cd echo before cd 1 echo after 这将执行echo before and echo after
  • 识别通过蓝牙与 PixelSense 配对的移动设备

    我希望能够通过蓝牙将 Microsoft PixelSense 硬件与多个移动设备配对 并且我希望 PixelSense 知道哪个设备是哪个 因此 如果我将两部手机放在桌子上 PixelSense 应该能够通过设备名称来标记它们 我最初的想
  • html 模板保存在哪里?

    我有一个单页应用程序 目前我的模板存储在index html中 例如 以这种方式存储它们是最佳实践吗 我发现了jQuery 模板 我应该把它们放在哪里 https stackoverflow com questions 4719828 jq
  • Redis 作为独特的原子 ID 生成器 - Web 应用程序避免竞争条件的线程安全方式

    我计划使用 Redis 作为唯一的原子 id 生成器 但是 我担心多个浏览器可能会同时发出 Web 请求 我想知道 使以下操作原子化的常见做法是什么 get id from redis if id is not found insert i
  • 如何从环境变量将动态主题名称传递给@KafkaListener(topics)

    我正在写一个卡夫卡消费者 我需要将环境变量主题名称传递给 KafkaListener topics 这是我到目前为止所尝试过的 import org springframework beans factory annotation Auto
  • 使用 itextsharp 根据大小将 pdf 拆分为更小的 pdf

    因此 我们有一些非常低效的代码 可以根据允许的最大大小将 pdf 分成更小的块 又名 如果最大大小为 10megs 则将跳过 8 meg 文件 而将根据页数拆分 16 meg 文件 这是我继承的代码 我觉得必须有一种更有效的方法来做到这一点
  • numpy 中的数组切片

    今天我使用numpy数组进行一些计算 发现一个奇怪的问题 例如 假设我已经在Ipython中导入了numpy arange 并且我运行了一些脚本 如下所示 In 5 foo arange 10 In 8 foo1 foo arange 3