Python numpy数据指针地址变化无需修改

2023-11-23

EDIT

经过一番摆弄后,到目前为止我已经隔离了以下状态:

  1. A 1D array gives two直接输入变量时的地址不同,并且仅one使用时print()
  2. A 2D array (or matrix) gives three直接输入变量时的不同地址,以及two使用时print()
  3. A 3D array gives two直接输入变量时的地址不同,并且仅one使用时print()(显然与1D array)

Like so:

>>> a = numpy.array([1,2,3], dtype="int32")

>>> a.data
<memory at 0x7f02e85e4048>
>>> a.data
<memory at 0x7f02e85e4110>
>>> a.data
<memory at 0x7f02e85e4048>
>>> a.data
<memory at 0x7f02e85e4110>
>>> a.data
<memory at 0x7f02e85e4048>

>>> print(a.data)
<memory at 0x7f02e85e4110>
>>> print(a.data)
<memory at 0x7f02e85e4110>
>>> print(a.data)
<memory at 0x7f02e85e4110>
>>> print(a.data)
<memory at 0x7f02e85e4110>
>>> print(a.data)
<memory at 0x7f02e85e4110>


>>> d = numpy.array([[1,2,3]], dtype="int32")

>>> d.data
<memory at 0x7f02e863ae48>
>>> d.data
<memory at 0x7f02e863a9e8>
>>> d.data
<memory at 0x7f02e863aac8>
>>> d.data
<memory at 0x7f02e863ae48>
>>> d.data
<memory at 0x7f02e863a9e8>
>>> d.data
<memory at 0x7f02e863aac8>

>>> print(d.data)
<memory at 0x7f02e863ae48>
>>> print(d.data)
<memory at 0x7f02e863a9e8>
>>> print(d.data)
<memory at 0x7f02e863ae48>
>>> print(d.data)
<memory at 0x7f02e863a9e8>
>>> print(d.data)
<memory at 0x7f02e863ae48>


>>> b = numpy.matrix([[1,2,3],[4,5,6]], dtype="int32")

>>> b.data
<memory at 0x7f02e863a9e8>
>>> b.data
<memory at 0x7f02e863ae48>
>>> b.data
<memory at 0x7f02e863aac8>
>>> b.data
<memory at 0x7f02e863a9e8>
>>> b.data
<memory at 0x7f02e863ae48>

>>> print(b.data)
<memory at 0x7f02e863aac8>
>>> print(b.data)
<memory at 0x7f02e863a9e8>
>>> print(b.data)
<memory at 0x7f02e863aac8>
>>> print(b.data)
<memory at 0x7f02e863a9e8>
>>> print(b.data)
<memory at 0x7f02e863aac8>


>>> c = numpy.matrix([[1,2,3],[4,5,6],[7,8,9]], dtype="int32")

>>> c.data
<memory at 0x7f02e863aac8>
>>> c.data
<memory at 0x7f02e863a9e8>
>>> c.data
<memory at 0x7f02e863ae48>
>>> c.data
<memory at 0x7f02e863aac8>
>>> c.data
<memory at 0x7f02e863ae48>
>>> c.data
<memory at 0x7f02e863a9e8>
>>> c.data
<memory at 0x7f02e863aac8>

>>> print(c.data)
<memory at 0x7f02e863ae48>
>>> print(c.data)
<memory at 0x7f02e863a9e8>
>>> print(c.data)
<memory at 0x7f02e863ae48>
>>> print(c.data)
<memory at 0x7f02e863a9e8>
>>> print(c.data)
<memory at 0x7f02e863ae48>


>>> e = numpy.array([[[0,1],[2,3]],[[4,5],[6,7]]], dtype="int32")

>>> e.data
<memory at 0x7f8ca0fe1048>
>>> e.data
<memory at 0x7f8ca0fe1140>
>>> e.data
<memory at 0x7f8ca0fe1048>
>>> e.data
<memory at 0x7f8ca0fe1140>
>>> e.data
<memory at 0x7f8ca0fe1048>


>>> print(e.data)
<memory at 0x7f8ca0fe1048>
>>> print(e.data)
<memory at 0x7f8ca0fe1048>
>>> print(e.data)
<memory at 0x7f8ca0fe1048>

原帖

我的印象是,只需在 python 控制台中输入一个变量,并回显一个字符串,简单地描述它的值(和类型)。它的格式与 print() 不同,但我假设它们返回的值是相同的。

当我尝试输出 numpy 对象的数据指针对象的地址时,只需输入变量就会每隔一段时间给出不同的值,而 print() 给出相同的值。

这表明这两个操作的区别不仅在于输出的格式如何,还在于它们从何处获取信息。但这些额外的差异到底包括什么?

>>> a = numpy.array([0,1,2])

>>> a
array([0, 1, 2])
>>> print(a)
[0 1 2]

>>> print(a.data)
<memory at 0x7ff25120c110>
>>> print(a.data)
<memory at 0x7ff25120c110>
>>> print(a.data)
<memory at 0x7ff25120c110>

>>> a.data
<memory at 0x7ff25120c110>
>>> a.data
<memory at 0x7ff253099818>
>>> a.data
<memory at 0x7ff25120c110>
>>> a.data
<memory at 0x7ff253099818>
>>> a.data
<memory at 0x7ff25120c110>

The memoryview由返回a.data似乎在两个(或更多)视图之间交替。如果您存储给定的实例a.data,你会得到一致的输出:

>>> a.data
<memory at 0x7fb88ea1f828>
>>> a.data
<memory at 0x7fb88e98c4a8>
>>> t = a.data
>>> a.data
<memory at 0x7fb88e98ce48>
>>> a.data
<memory at 0x7fb88e98c3c8>
>>> a.data
<memory at 0x7fb88e98c4a8>
>>> a.data
<memory at 0x7fb88e98ce48>
>>> a.data
<memory at 0x7fb88e98c3c8>
>>> a.data
<memory at 0x7fb88e98c4a8>
>>> t
<memory at 0x7fb88ea1f828>
>>> t
<memory at 0x7fb88ea1f828>
>>> t
<memory at 0x7fb88ea1f828>

注意,上例中有 3 个地址轮换;我很确定这都是实现细节。我猜想涉及到一些缓存,这意味着每次访问时实际上并没有生成新视图a.data.

您还可以确保您正在查看单独的视图对象:

>>> id(a.data)
140430643088968
>>> id(a.data)
140430643086280
>>> id(a.data)
140430643088968
>>> id(a.data)
140430643086280

所以大部分的混乱可能来自这样一个事实:a.data表明我们正在谈论的是一个固定的对象,但事实并非如此。

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

Python numpy数据指针地址变化无需修改 的相关文章

  • 从Python中的字符串中提取货币金额

    我正在制作一个程序 从字符串中获取货币并将其转换为其他货币 例如 如果字符串是 the car cost me 13 250 我需要得到 and 13250 我已经有了这个正则表达式 1 确实如此 但是该字符串很有可能有多个价格 并且全部使
  • for 循环如何评估其参数

    我的问题很简单 Does a for循环评估它每次使用的参数 Such as for i in range 300 python 是否会为此循环的每次迭代创建一个包含 300 个项目的列表 如果是的话 这是避免这种情况的方法吗 lst ra
  • 如何使用显式引用转储 YAML?

    递归引用非常适合ruamel yaml or pyyaml ruamel yaml dump ruamel yaml load A A id001 id001 然而 它 显然 不适用于普通引用 ruamel yaml dump ruamel
  • TF map_fn 或 while_loop 用于不同形状的张量列表

    我想处理不同形状的张量序列 列表 并输出另一个张量列表 考虑每个时间戳上具有不同隐藏状态大小的 RNN 就像是 输入 tf ones 1 2 2 tf ones 2 2 3 tf ones 3 2 1 输出 tf zeros 1 2 4 t
  • 在 macOS 中通过 Python 访问进程的压缩 RAM(顶部的 CMPRS)的方法?

    我试图弄清楚如何从 Python 访问任何给定进程占用的实际 RAM 量 我发现 psutil Process PID memory info rss 工作得很好 直到操作系统决定开始压缩某些进程的 RAM 然后 所有的 memory in
  • 更改 Altair 中的构面标题位置?

    如何将方面标题 在本例中为年份 移动到每个图的上方 默认值似乎位于图表的一侧 这可以轻易改变吗 import altair as alt from vega datasets import data df data seattle weat
  • 如何在 Python 3 中循环遍历集合,同时从集合中删除项目

    这是我的情况 我有一个list set 哪个并不重要 movieplayer我想调用的对象 preload 功能开启 该预加载函数可以立即返回 但希望将来返回一点 我想存储这个电影播放器 集合 表明它们尚未预加载 然后循环它们 调用prel
  • 如何将 self 传递给装饰器?

    我该如何通过self key下面进入装饰器 class CacheMix object def init self args kwargs super CacheMix self init args kwargs key func Cons
  • Apache Spark 中的高效字符串匹配

    我使用 OCR 工具从屏幕截图中提取文本 每个大约 1 5 句话 然而 当手动验证提取的文本时 我注意到时不时会出现一些错误 鉴于文本 你好 我真的很喜欢 Spark 我注意到 1 像 I 和 l 这样的字母被 替换 2 表情符号未被正确提
  • PySide6.1 与 matplotlib 3.4 不兼容

    当我只安装PySide6时 GUI程序运行良好 但是一旦我安装了matplotlib及其依赖包 包括pyqt5 则GUI程序将无法运行并输出以下错误消息 This application failed to start because no
  • 为什么我无法在 Mac OS X Terminal.app 上的 Python 解释器中显示 unicode 字符?

    如果我尝试粘贴 unicode 字符 例如中间的点 在我的 python 解释器中它什么也不做 我在 Mac OS X 上使用 Terminal app 当我只是在 bash 中时 我没有遇到任何问题 但在解释器中 python Pytho
  • 乘以行并按单元格值附加到数据框

    考虑以下数据框 df pd DataFrame X a b c d Y a b d e Z a b c d 1 2 1 3 df 我想在 列中附加数字大于 1 的行 并在该行中的数字减 1 df 最好应该 然后看起来像这样 或者它可能看起来
  • Python 惰性迭代器

    我试图了解迭代器表达式如何以及何时被求值 以下似乎是一个懒惰的表达 g i for i in range 1000 if i 3 i 2 然而 这个在构造上失败了 g line strip for line in open xxx r if
  • 在 virtualenvwrapper 中激活环境

    我安装了virtualenv and virtualenvwrapper用这个命令我创建了一个环境 mkvirtualenv cv 它有效 创建后我就处于新环境中 现在我重新启动了我的电脑 我想activate又是那个环境 但是怎么样 我使
  • 更改 Python Cmd 模块处理自动完成的方式

    我有一个 Cmd 控制台 设置为自动完成 Magic the Gathering 收藏管理系统的卡牌名称 它使用文本参数在数据库中查询卡片 并使用结果自动完成 建议卡片 然而 这些卡片名称有多个单词 Cmd 会从last到行尾的空间 例如
  • Python 通过从现有 csv 文件中过滤选定的行来写入新的 csv 文件

    只是一个问题 我试图将 csv 文件中的选定行写入新的 csv 文件 但出现错误 我试图读取的 test csv 文件是这样的 两列 2013 9 1 2013 10 2 2013 11 3 2013 12 4 2014 1 5 2014
  • Python:高精度time.sleep

    你能告诉我如何在 Win32 和 Linux 上的 Python 2 6 中获得高精度睡眠函数吗 您可以在中使用浮点数sleep http docs python org library time html time sleep 该参数可以
  • Django 模型:如何使用 mixin 类来覆盖 django 模型以实现 save 等功能

    我想在每次保存模型之前验证值 所以 我必须重写保存函数 代码几乎是一样的 我想把它写在 mixin 类中 但失败了 我不知道如何写 super func 我英语不好 抱歉 class SyncableMixin object def sav
  • 如何在单元测试中使用 JSON 发送请求

    我的 Flask 应用程序中有在请求中使用 JSON 的代码 我可以像这样获取 JSON 对象 Request request get json 这一直工作得很好 但是我正在尝试使用 Python 的 unittest 模块创建单元测试 但
  • 使用 urllib 编码时保持 url 参数有序

    我正在尝试用 python 模拟 get 请求 我有一个参数字典 并使用 urllib urlencode 对它们进行 urlencode 我注意到虽然字典的形式是 k1 v1 k2 v2 k3 v3 urlencoding 后参数的顺序切

随机推荐

  • 您建议将哪个数据库与 C# (.NET) 应用程序一起使用?

    我正在制定一个小项目计划 当我需要决定使用什么本地数据库系统时 输入数据将存储在网络服务器上 托管 MySQL DB 这个想法是建立一个流程来下载所有必要的数据 例如在午夜 并处理它们 然而 会有很多输入和处理阶段 所以我需要使用某种本地数
  • 处理器有哪些优化代码的技巧?

    我正在寻找诸如代码重新排序之类的东西 这些东西甚至可能在多处理器的情况下破坏代码 最重要的一个是内存访问重新排序 如果没有内存栅栏或序列化指令 处理器可以自由地重新排序内存访问 某些处理器架构对其可以重新排序的数量有限制 Alpha 因最弱
  • 如何使用 lambda 初始化映射?

    我想在单个语句中声明一个完全填充的映射字段 可能包含多个嵌套语句 如下所示 private static final Map
  • Ruby 字符串连接问题

    这有效 irb main 001 0 gt name Rohit Sharma gt Rohit Sharma 但这并不 irb main 001 0 gt fname Rohit gt Rohit irb main 002 0 gt ln
  • 根据眼睛图像进行注视估计

    到目前为止我已经能够准确地检测瞳孔和眼角 您可以在此处看到我在回答自己的问题时上传的一些快照 执行稳定的眼角检测 这是我到目前为止所做的 我通过查看 TLCP TRCP 和 BLCP 来校准用户的视线 在哪里 CP calibration
  • 将大数据加载到 TensorFlow 2.0 中,而不将其加载到 RAM 上

    我已经处理并保存了大量视频和音频文件数据集 大约 8 到 9 GB 的数据 数据保存为 2 个 numpy 数组 每个数组对应一种模态 文件的形状为 number of examples maximum time length featur
  • 带有 ViewPager2 的 BottomSheetBehavior 无法通过嵌套的 RecyclerView 滚动向下滚动

    我有一个类似的观点BottomSheet行为这个视图有ViewPager2里面 每个ViewPager2的页面都是一个垂直的RecyclerView 问题是 当当前垂直 RecyclerView ViewPager 的页面 无法再垂直滚动时
  • 在 swift4.1 中将 Any 转换为 Float 总是失败

    在以前的版本中 要从 a 获取浮点值 String Any 字典 我可以用let float dict somekey as Float 但是在swift4 1中 不起作用 似乎是这样的类型dict somekey 已被隐含地推断为Doub
  • 如何从 SqlDataReader 解析 Nullable

    DateTime TryParse 方法采用 DateTime 作为参数 而不是 DateTime 现在我有以下代码 if DateTime TryParse reader Placed ToString out placed throw
  • 在 Windows Kafka 上删除主题时出现 AccessDeniedException

    我刚刚在我的 Windows 机器上安装了 Kafka 来自 Confluence Platform 我启动了 Zookeeper 和 Kafka 并创建主题 生产和消费它们的工作 然而 一旦我删除一个主题 Kafka 就会崩溃 如下所示
  • 如何避免 Selenium 中的 StaleElementReferenceException - Python

    我陷入了编写 Python Selenium 脚本的困境 似乎无法令人满意地解决我收到的这个 StaleElementReferenceException 我已加载页面并单击一个按钮 该按钮将打开一个表单 允许用户向订单添加新的信用卡 此时
  • 如何用java转换巨大的xml文件?

    正如标题所说 我有一个巨大的 xml 文件 GB
  • Angularjs 后接收钩子或类似的?

    有没有一种方法可以在每次从服务器返回响应后调用一个函数 而无需在回调中显式调用它 主要目的是我确实有一个通用错误处理程序服务 我在每个请求的回调中调用它 并且我想在某处指定它并且它应该被自动调用 我给了Gloopy一个 1的解决方案 但是
  • 如何冻结无法冻结的可冻结对象

    在我的场景中 我想先冻结不变的 BitmapCacheBrush 然后再在后台任务中渲染它 不幸的是 我收到错误 此 Freezable 无法冻结 是否有任何解决方法或黑客方法冻结也不可冻结的对象 也许可以通过反射设置正确的属性来达到这个目
  • jQuery UI 日期选择器不会显示 - 包含完整代码

    我在显示 jQuery 日期选择器时遇到问题 如下所示 http jqueryui com demos datepicker 我相信我下载了所有正确的文件 但可以肯定的是 我从头开始并破解了演示网站 不是全部 而是我认为重要的部分 结果是没
  • 将 Bitbucket 部署到 Azure 网站:添加私有 nuget 包服务器

    我已经在 Azure 上建立了一个网站 通过 Bitbucket 存储库进行部署 当尝试安装存储在私有 nuget 服务器 而不是 nuget org 上 的 nuget 包时 该过程会失败 有没有办法指定从何处还原 nuget 包 以便
  • 如果活动崩溃,如何清除通知?

    在我的应用程序中 我正在创建一个带有 FLAG ONGOING EVENT 标志设置的通知 Notification notification new Notification iconId text System currentTimeM
  • 在某些代理关闭后如何更改主题领导者或删除分区?

    我们有一个带有 4 个代理的 kafka 集群 以及一些具有副本因子 1 和 10 分区的主题 某一时刻 我们的 4 台服务器中的 2 台与 kafka 集群发生故障 现在我们有 2 个具有相同主题的经纪人 当我运行命令时 kafka to
  • 将 Mercurial 变更集作为版本信息注入 C 可执行文件中

    我希望我正在开发的项目的可执行文件能够记录最新的 Mercurial 变更集 以便当用户抱怨错误行为时 我可以跟踪他们正在使用的版本 我的一些可执行文件是 Python 的 其他是 C 编译的 有没有办法自动执行此操作 或者您能给我指出一些
  • Python numpy数据指针地址变化无需修改

    EDIT 经过一番摆弄后 到目前为止我已经隔离了以下状态 A 1D array gives two直接输入变量时的地址不同 并且仅one使用时print A 2D array or matrix gives three直接输入变量时的不同地