2014-10-31 3 views
0

может кто-нибудь мне помочь?TypeError: аргумент SetPoint 1: целочисленный аргумент ожидается, получил float

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 

фл должен иметь поплавок, у меня есть массив из реального мира эксперимента, я не могу изменить значения в целое.

Это проблема, связанная с InsertPoint, это только взятие int? Может кто-нибудь помочь мне исправить это?

Кроме того, у меня нет опыта работы на Python, я никогда не писал программу, это первая программа, с которой я работаю, я вносил изменения в старую программу, чтобы заставить ее работать для моих целей, но не могу понять то, что я сделал неправильно

Спасибо :)

ответ

0

проблема заключается не в том или нет фл состоит из поплавков. Проблема заключается в том, что сигнатура метода для InsertPoint ожидает, что каждое значение будет int.

Из документации Python:

exception TypeError: 

Raised when an operation or function is applied to an object of inappropriate type. The associated value is a string giving details about the type mismatch.

Эта информация явно доступна в сообщении об ошибке вставили - это имеет и тип исключения (TypeError) и объект, с помощью которого он был брошен (InsertPoint). Если бы вы случайно включили поплавок в своих индексаторах массивов, исключение было бы выбрано чем-то другим, кроме InsertPoint.

В будущем вы должны провести исследование Google на основе ошибки исключения. Я не говорю вам ничего, что вы не могли найти там.

Если вы все еще хотите использовать InsertPoints, у вас есть два варианта:

  1. Вы можете использовать (Int) отливать укоротить Edit: первый из ваших аргументов в целом, целое значение (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]))

+0

Знаете ли вы что-то похожее на InsertPoint, которое будет выполнять ту же работу, но будет нормально с поплавками? – aregak

+0

Проблема в том, что мне нужно иметь поплавки. Я не обязательно должен использовать insertpoint, хотя – aregak

+1

@aregak Это тип vtk? Можете ли вы указать мне на конкретное пространство имен/библиотеку, в которой этот тип существует? Кроме того, вы можете попробовать заменить InsertPoints() несколькими вызовами InsertNextPoint()? – furkle

-1

Попробуйте обернув каждый или ваши ценности в 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])) 
0

Если вы посмотрите на документацию vtkpoints :: InsertPoint вы увидите, что ожидаемые аргументы (идентификатор, х, у, г). Вы используете этот метод, когда вам нужно установить значение точки в позиции id (поэтому она должна быть целым числом). http://www.vtk.org/doc/nightly/html/classvtkPoints.html#ab7f990c73fb291737abe4203994ce2a2

из оболочки python, вы также можете проверить help(pts.InsertPoint) - но поскольку они являются обернутыми объектами, иногда помощь оказывается немного неясной.

Метод InsertNextPoint вместо этого просто требует x, y, z и может использоваться так же, как вы это делаете.Он не требует явного идентификатора, потому что это будет только ваша точка в конце.

В частности, для python вам также может быть интересен vtk.util.numpy_support, который упрощает конверсии между numpy и vtk (вы можете конвертировать ваши от numpy до vtkdoublearray, затем назначьте его vtkpoints с помощью метода setdata)

Смежные вопросы