指定和不指定 dtype 的 numpy.array 行为很奇怪

2023-12-08

我对此完全感到困惑。

从以下

import numpy as np

a = np.array([4, -9])
a[0] = 0.4
a

I 预期输出: array([ 0.4, -9])。但它给了我

array([ 0, -9]).

但是当我改变了dtype to f

a = np.array([4, -9], 'f')
a[0] = 0.4
a

它给了我预期的输出array([ 0.40000001, -9. ], dtype=float32)

的文档numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0) says:

dtype :数据类型,可选 数组所需的数据类型。如果未给出,则类型将被确定为保存序列中的对象所需的最小类型。该参数只能用于“向上转换”数组。对于向下转型,请使用 .astype(t) 方法。

当我初始化数组时,它会将值初始化为integers所以当我用 a 索引数组时float它只认识到integer部分0.4因此给了我0。我是这样理解的。它是否正确?。但我仍然对这种行为感到惊讶。

Question: 这到底是怎么回事?


问题是你的数组是dtype=np.int64:

In [141]: a = np.array([4, -9])

In [142]: a.dtype
Out[142]: dtype('int64')

这意味着您只能存储整数,并且在分配完成之前任何浮点数都会被截断。如果你想将浮点数和整数存储在一起,你应该指定dtype=object first:

In [143]: a = np.array([4, -9], dtype=object)

In [144]: a[0] = 0.4

In [145]: a
Out[145]: array([0.4, -9], dtype=object) 

至于问题array([ 0.40000001, -9. ], 0.4,因为浮点数在内存中没有精确的表示(只有近似的表示),这解释了您看到的不精确性。

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

指定和不指定 dtype 的 numpy.array 行为很奇怪 的相关文章

随机推荐

  • JasperReport 参数在 iReport 中有效,但在 JasperServer 上失败

    我在 iReport 中创建了一份报告 使用 isForPrompting true 设置参数 当我用预览来测试它时 一切正常 Parameter Symbol SQL Query select from table where colum
  • 如何在没有浏览器的情况下与网站交互? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 假设我正在构建一个 C 应用程序 申请目的 从用户处获取用户名和密码 并显示网站上存在的
  • jQuery Mobile 不加载新页面脚本

    将 jQuery Mobile 与 Django 结合使用 在页面转换期间 基本脚本似乎加载正常 但从一个页面到下一个页面 标题下的新页面脚本不会在浏览器中加载 更具体 我通过输入网址加载主页 一切正常 我通过单击主页中的链接加载下一页 然
  • 使用与重复字段同名的字段时 BigQuery 会扁平化

    编辑以使用公共数据集 I have a table with the following schema which you can access here https bigquery cloud google com table real
  • 如何使用 Mojo 进行内部重定向?

    Catalyst 支持的重定向内部到框架 forward and detach 和外部 HTTP 重定向 res gt redirect 内部重定向本质上只是重新分派到新路径 假设我设置了两条路径 sub register self app
  • 使用 ViewPager 更改片段

    我在用PagerSlidingTab图书馆ViewPager 我想在滚动选项卡时更改片段 它运行良好 查看我的代码 我在用AsynTask 在各个Fragment 当应用程序通过 MainActivity 打开时 第一个 Fragment
  • 适用于 C、C++ 或 Fortran 的代码抛光器/重新格式化器 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 假设您有一堆由不同作者用 C C 或 Fortran 编写的文件 在格式 如何注释等方面有不同的意见 我想很多人都知道这样的情况 是否有任何免费工具
  • Xamarin.Forms 警告:尝试在其视图不在 iOS 图像/手势识别器的窗口层次结构中的 * 上呈现 *

    我有一个模态导航页面 其中包含一个充当按钮的图像
  • Android Toolbar的Switch的actionLayout导致按下菜单时文本跳转

    请参考我的项目 https github com paulpv ToolbarSwitch 我正在为 Android 工具栏 又名 新 ActionBar 开发一个简单的自定义布局 这个简单的控件向工具栏添加了一个开关 可以在此处以洋红色突
  • 在Blackberry中,我们可以创建可供不同应用程序使用的通用库吗?

    我想创建一个通用的第三方库 它可以被不同的应用程序共享和使用 并且保持一致 我们可以实现这个目标吗 如果可以 这个库将如何安装以及在哪里安装 以及如何从其他应用程序访问这些库文件 是的 你可以这样做 您创建并编译该库 您可以在依赖它的应用程
  • 通过此与虚拟对象同步

    到目前为止 我已经看到了同步块的用法 但最近我了解到使用虚拟对象更好 我发现以下与此相关的主题 Java同步方法锁定对象或方法 总而言之 在下面的代码中 两个不同的对象不能同时运行 addA 和 addB 因为它们都使用 this 作为锁
  • Java:如何从图像数组创建电影?

    我基本上有一个字节矩阵 每行 即 byte 代表一个图像 如何创建一个电影 任何格式 avi mpeg 等等 并将其保存为文件 每个图像可以是以下之一 int JPEG Encoded formats int NV16 YCbCr form
  • 使用 Project Reactor 和 DirectoryStream 列出目录内容

    我想将 DirectoryStream 与 Project Reactor 一起使用来列出目录中的所有文件 我的尝试是 Path myDir Paths get C Users r dacanal Documents Reply EDA l
  • Hibernate:多对多关系表作为实体

    问题如标题所示 如何将多对多关系表作为实体 我想说 你的问题很有道理 看看这个文档部分 第 24 章最佳实践 摘录 不要使用外来关联映射 真正的多对多关联的实际测试用例很少 最多 您需要存储在 链接 中的附加信息的时间 table 在这种情
  • ImageIO write() 是阻塞方法吗?

    在我用 java 开发的应用程序中 我使用 ImageIO API 来缩放图像 然后将它们写入目录 然后通知 Web 服务器图像已准备好使用 向 Web 服务器发送信号之前的最后一个调用是 ImageIO write 方法 但 Web 服务
  • TinyMCE 4 插入链接表单字段已禁用

    我正在使用TinyMCE Railsgem 使用 TinyMCE 4 我正在加载link插件 所有这一切都是在颜色框弹出窗口之后 中启动的 TinyMCE 编辑器工作正常 但链接按钮会弹出一个对话框来添加 编辑链接 但除了target可供编
  • 使用openpyxl旋转Excel图表的轴

    那里 我正在尝试使用 openpyxl 来处理 Excel 数据 将图片绘制出来并导出它们就可以了 但是 x axis 不够漂亮 我想旋转它 但在文档中没有找到解决方案 这是使用 XlsxWriter 的解决方案 solution 我的代码
  • 如何自动展开和打印 TreeView

    我创建了一个应用程序 它会扫描每台计算机 并使用硬件 软件和更新 修补程序信息填充 TreeView 我遇到的问题是打印 如何自动展开树视图并将所选计算机的结果发送到打印机 我当前使用的方法是将内容发送到画布 BMP 然后将其发送到打印机
  • Boost序列化:如何预测序列化结果的大小?

    我以这种方式使用 boost 序列化 Header H Magic SSP T REQUEST 98 72 42 Date SSP C NONE Header Z std cout lt lt H lt lt std endl std co
  • 指定和不指定 dtype 的 numpy.array 行为很奇怪

    我对此完全感到困惑 从以下 import numpy as np a np array 4 9 a 0 0 4 a I 预期输出 array 0 4 9 但它给了我 array 0 9 但是当我改变了dtype to f a np arra