【问题标题】:TypeError: SetPoint argument 1: integer argument expected, got floatTypeError:SetPoint 参数 1:需要整数参数,得到浮点数
【发布时间】:2014-11-02 04:27:44
【问题描述】:

有人可以帮我解决这个问题吗?

pts.InsertPoint(fl[i+1][j+1][k+1], xx[0][i+1], yy[0][j+1], zz[0][k+1])
TypeError: InsertPoint argument 1: integer argument expected, got float

fl 应该有浮点数,我有来自真实世界实验的数组,我无法将值更改为 int。

这是一个与 InsertPoint 相关的问题吗,它只需要 int 吗?有人可以帮我解决吗?

另外,我没有 Python 经验,从未编写过程序,这是我正在使用的第一个程序,我对旧程序进行了更改以使其适合我的目的,但无法弄清楚我做错了什么

谢谢:)

【问题讨论】:

    标签: python vtk


    【解决方案1】:

    如果您查看 vtkpoints::InsertPoint 的文档,您会看到预期的参数是 (id,x,y,z)。当您必须要设置位置 id 处的点的值时,您可以使用此方法(这就是它必须是整数的原因)。 http://www.vtk.org/doc/nightly/html/classvtkPoints.html#ab7f990c73fb291737abe4203994ce2a2

    在 python shell 中,您还可以检查 help(pts.InsertPoint) - 但由于这些是包装对象,有时帮助显得有些晦涩。

    InsertNextPoint 方法只需要 x,y,z 并且可以按照您的方式使用。它不需要明确的 id,因为它只是你最后的观点

    特别是对于 python ,您可能还对 vtk.util.numpy_support 感兴趣,它使 numpy 和 vtk 元素之间的转换更容易(您可以将点从 numpy 转换为 vtkdoublearray,然后使用 setdata 方法将其分配给 vtkpoints )

    【讨论】:

      【解决方案2】:

      问题不在于 fl 是否由浮点数组成。问题是 InsertPoint 的方法签名要求每个值都是一个 int。

      来自 python 文档:

      exception TypeError:
      

      当操作或函数应用于不适当类型的对象时引发。关联的值是一个字符串,提供有关类型不匹配的详细信息。

      您粘贴的错误消息中清楚地显示了此信息 - 它具有异常类型 (TypeError) 和引发异常的对象 (InsertPoint)。如果您不小心在数组索引器中包含了一个浮点数,那么除了 InsertPoint 之外的其他东西都会引发异常。

      以后,您应该根据您的异常错误对 Google 进行一些研究。我不会告诉你任何你在那里找不到的东西。

      如果您仍想使用 InsertPoints,您有两种选择:

      1. 您可以使用 (int) 强制转换来截断编辑:您的第一个参数为整数,整数值(1.2 截断为 1,2.67 截断为 2,等等),如下所示:

        int(fl[i+1][j+1][k+1])

      2. 您可以执行 #1,但将值四舍五入到最接近的整数值,如下所示(请记住,您需要导入数学):

        int(Math.Round(fl[i+1][j+1][k+1]))

      【讨论】:

      • 你知道类似于 InsertPoint 的东西,它可以做同样的工作,但可以使用浮点数吗?
      • 问题是我需要花车。不过,我不一定需要使用插入点
      • @aregak 这是 vtk 类型?你能指出我存在该类型的特定命名空间/库吗?另外,您可以尝试用多个 InsertNextPoint() 调用替换 InsertPoints() 吗?
      • 是的,这是 vtk 类型!我认为 InsertNextPoint() 在我的情况下效率不高,我的数组大小为 81x81x61
      • 请注意,只有第一个参数应该是一个 int。其他三个是花车。
      【解决方案3】:

      尝试将每个值或您的值包装在int() 中,如下所示:

      pts.InsertPoint(int(fl[i+1][j+1][k+1]), int(xx[0][i+1]), int(yy[0][j+1]), int(zz[0][k+1]))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-16
        • 2018-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-05
        相关资源
        最近更新 更多