首页 > 编程问答 >numpy 数字输出周围有类型转换,这是我的程序中的一个错误

numpy 数字输出周围有类型转换,这是我的程序中的一个错误

时间:2024-07-31 03:58:37浏览次数:11  
标签:python numpy casting

我使用四元数函数将 python 元组转换为 numpy 数组,然后将返回的 numpy 数组转换回元组。这里, start_pos 是一个元组 (0,0,0) 第二个元组进入列表。

current_pos = np.array(start_pos)
current_quaternion = Quaternion.from_axis_angle(np.array([0,0,1]), math.radians(rotation))
vertices.append(tuple(current_pos))

这曾经在我的最后一台笔记本电脑上工作,但是现在,当我运行我的源代码时 tuple(current_pos) 的输出看起来像 (np.int64(0), np.int64(0), np.int64(0))

这对我不起作用,因为顶点需要要写入文件,格式需要像 0.4999238475781956 这样的原始数字,而不是 np.float64(0.4999238475781956)

以前,相同的源代码在 tuple(current_pos) 后面输出正确的东西。它输出原始数字。当我将文件导入新笔记本电脑并安装 python 和 numpy 时,某些变化导致了此问题。

  • Python 版本:3.12.4(tags/v3.12.4:8e8a4ba,2024 年 6 月 6 日,19:30:16) [MSC v.1940 64 位 (AMD64)]
  • NumPy 版本:2.0.1

start_pos = (0,0,0) ,我期望将 3 个原始数字的元组作为浮点数附加到列表中 vertices 相反, vertices 看起来像:

[(np.int64(0), np.int64(0), np.int64(0)),
 (np.float64(0.0), np.float64(0.0), np.float64(1.0)),
 (np.float64(0.4999238475781956), np.float64(0.008726203218641754), np.float64(1.8660254037844388)),
 (np.float64(0.0), np.float64(0.0), np.float64(2.0))]

由于 NumPy 数组维护数据类型,因此会在元组中看到类型转换。当创建 current_pos = np.array(start_pos) 时,它会创建一个数据类型为 int64 的 NumPy 数组,因为 start_pos 是一个整数元组。后续操作可能会将数组中的值更改为浮点数,但数组的数据类型仍为 int64 float64

要解决此问题,需要在创建元组后从 NumPy 数组中提取原始数字值。可以通过多种方式实现:

  1. 使用 tolist() 方法:
vertices.append(tuple(current_pos.tolist()))

tolist() 方法将 NumPy 数组转换为 Python 列表,其中包含原始 Python 数值类型。

  1. 使用列表推导:
vertices.append(tuple(float(x) for x in current_pos))

此方法遍历 NumPy 数组并使用 float(x) 将每个元素转换为 Python 浮点数,然后创建一个新的元组。

  1. 在创建数组时指定数据类型:
current_pos = np.array(start_pos, dtype=float)
vertices.append(tuple(current_pos))

通过在创建 current_pos 数组时指定 dtype=float ,可以确保数组从一开始就包含浮点数,从而无需以后进行转换。

通过应用这些方法中的任何一种,应该能够在 vertices 列表中获取原始数字元组,而不会出现类型转换。

标签:python,numpy,casting
From: 78813431

相关文章

  • python函数:带星号的参数一个接一个
    我想知道为什么定义以下函数被认为是好的。deffoo(*x,y):pass据我所知,现在有调用此函数的方法,因为它总是缺少y的值。(如果我错了,请纠正我。)这有什么我不知道的用处吗?你说得对,在Python中定义一个像deffoo(*x,y):...这样的函数,在试图以常规方......
  • 基于遗传(GA)、粒子群(PSO)、模拟退火(SA)、禁忌搜索(ST)、蚁群算法(ACO)、自自组织神
        ......
  • 10个append()函数在Python程序开发中的创新应用
    文末赠免费精品编程资料~~在Python编程的世界里,append()函数是列表操作中最常见的方法之一。它允许我们在列表的末尾添加一个元素,这一简单的功能却能激发无限的创造力。今天,我们将探讨append()函数在Python程序开发中的10种创新应用,从基本用法到高级技巧,逐步深入。1.构......
  • 全网最适合入门的面向对象编程教程:28 类和对象的Python实现-Python编程原则、哲学和规
    全网最适合入门的面向对象编程教程:28类和对象的Python实现-Python编程原则、哲学和规范大汇总摘要:本文主要介绍了在使用Python进行面向对象编程时,Python异常处理的原则-“请求谅解,而非许可”,以及软件设计和Python的编程原则,同时介绍了PEP8规范。原文链接:FreakStud......
  • python生成器
    一前言环境:python3.10win10二生成器1关于生成器先看一个例子    定义了一个函数,当我们运行该函数时,并未像普通函数那样执行函数体内的代码    从其中的英文可知,执行函数得到了一个生成器对象,这个生成器对象也叫做generatoriterator(生成器迭代器),generatorit......
  • 生成MySQL-oracle-SQL server数据字典(附Python代码)
    生成数据字典,早年写的,请注意新的版本变化。(1)MySQL元数据SQLUSEinformation_schema;#取出库和表。select  TABLE_SCHEMAAS'数据库名称',  TABLE_NAMEAS'表名',  TABLE_TYPEAS'表类型',  ROW_FORMATAS'行格式',  ENGINEAS'数据库引擎',  TABL......
  • Python - Method Resolution Order (MRO)
    TheorderinwhichPythonsearchesforattributesinbaseclassesiscalledmethodresolutionorder(MRO).Itgivesalinearizedpathforaninheritancestructure.PythoncomputesanMROforeveryclassinthehierarchy;thisMROiscomputedusingthe‘C3......
  • 计算机毕业设计选题推荐-零食批发商仓库管理系统-Java/Python项目实战
    ✨作者主页:IT研究室✨个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。☑文末获取源码☑精彩专栏推荐⬇⬇⬇Java项目Python项目安卓项目微信小程序项目......
  • 【自动化测试必学语言】python:语言基础
    目录Python介绍语言的分类注释单行注释多行注释变量定义变量使用变量变量名的命名规范数据类型数字类型非数字类型type()函数input输入print输出格式化输出快捷键(小操作)运算符算术运算符 比较运算符Python介绍作者:吉多·范罗苏姆(Guidov......
  • Python基础知识笔记——常用函数
    一、range()函数range()函数用于生成一个整数序列。它通常用于循环结构中,例如for循环,以提供循环的迭代次数。range()函数可以有1到3个参数。#range(start,stop,step)range(2,6,2)#生成从2开始,到6结束(不包括6),步长为2的一串数字#参数指定不完全时,默认从0开始,步长......