[Paraview] [EXT] RE: [EXTERNAL] Calculating cylindrical coordinates

Cory Quammen cory.quammen at kitware.com
Mon Apr 30 13:44:08 EDT 2018


Dennis,

First, do you mean numpy.arctan2? I don't see that numpy.atan2 exists,but
math.atan2 exists.

Second, I suspect you are looping over millions of points in Python and are
calling numpy.arctan2 on single X, Y values. Looping in Python like that
will be very slow. Instead, you can get all your X values into one numpy
array and do the same with your Y values, then make a single call to
numpy.atan2. Here's an example:

>>> from paraview.simple import *

>>> import numpy

>>> x = [1, 2, 3, 4]

>>> y = [5, 6, 7, 8]

>>> numpy.arctan2(y, x)

array([ 1.37340077, 1.24904577, 1.16590454, 1.10714872])

To get the X and Y arrays, you can use the numpy adapter:

>>> from vtk.numpy_interface import dataset_adapter as dsa

>>> wrappedData = dsa.WrapDataObject(polydata)

>>> X = wrappedData.Points[:,0]

>>> Y = wrappedData.Points[:,1]

>>> result = numpy.arctan2(Y, X)

Hope that helps,
Cory


On Sat, Apr 28, 2018 at 1:25 AM, kenichiro yoshimi <rccm.kyoshimi at gmail.com>
wrote:

> Hi Dennis,
>
> You can calculate cylindrical coordinates by utilizing
> vtkCylindricalTransform within the python programmable filter. It is
> something like below and faster than numpy.
>
> ---
> import vtk
>
> input = self.GetInput()
> output = self.GetOutput()
>
> transform = vtk.vtkCylindricalTransform()
>
> transformFilter = vtk.vtkTransformFilter()
> transformFilter.SetInputData(input)
> transformFilter.SetTransform(transform.GetInverse())
> transformFilter.Update()
>
> output.ShallowCopy(transformFilter.GetOutput())
> ---
>
> This converts (x,y,z) coordinates to (r,theta,z) coordinates by GetInverse
> method,
> where the angles are calculated by the following equation to change range
> to [0, 2*pi]:
>   theta = pi + atan2(-y, -x).
>
> Regards
>
> 2018-04-28 5:25 GMT+09:00 Dennis Conklin <dennis_conklin at goodyear.com>:
>
>> Alan,
>>
>>
>>
>> Yes, I am calling it many times at the same angular location, but it’s
>> tough to know you’re at the same angular location without calculating the
>> angle.
>>
>>
>>
>> Also, C++ is definitely orders of magnitude quicker, but once I have to
>> compile routines into Paravew life gets very complicated.   We barely
>> survived compiling for cluster use and I haven’t written C++ for at least
>> 20 years.
>>
>>
>>
>> So, if possible, I would like a clever external add-on that wouldn’t
>> require us to re-compile PV everytime we update our version.   I have
>> visions of library errors in my nightmares!
>>
>>
>>
>> Dennis
>>
>>
>>
>> *From:* Scott, W Alan [mailto:wascott at sandia.gov]
>> *Sent:* Friday, April 27, 2018 4:00 PM
>> *To:* Dennis Conklin <dennis_conklin at goodyear.com>; Paraview (
>> paraview at paraview.org) <paraview at paraview.org>
>> *Subject:* [EXT] RE: [EXTERNAL] [Paraview] Calculating cylindrical
>> coordinates
>>
>>
>>
>>  *CAUTION: *EXTERNAL email. Please think before clicking on any links or
>> attachments.
>>
>>
>>
>> Are there places on the cylinder you are calling atan2 with the same
>> inputs, returning the same data, lots of times?  Alternatively, could you
>> calculate this in the simulation, and just add it to the simulation
>> output?  I am speculating that a C++ call to atan2 may be faster than numpy?
>>
>>
>>
>> Alan
>>
>>
>>
>> *From:* ParaView [mailto:paraview-bounces at public.kitware.com
>> <paraview-bounces at public.kitware.com>] *On Behalf Of *Dennis Conklin
>> *Sent:* Friday, April 27, 2018 1:39 PM
>> *To:* Paraview (paraview at paraview.org) <paraview at paraview.org>
>> *Subject:* [EXTERNAL] [Paraview] Calculating cylindrical coordinates
>>
>>
>>
>> All,
>>
>>
>>
>> If I wanted to run atan2(X,Y) on millions and millions of nodes to
>> calculate cylindrical coordinates, but found that numpy.atan2 in a
>> Programmable Filter was taking 45 minutes to run,   what should I do to
>> make it much faster?
>>
>>
>>
>> Thanks for any hints
>>
>>
>>
>> Dennis
>>
>> _______________________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Please keep messages on-topic and check the ParaView Wiki at:
>> http://paraview.org/Wiki/ParaView
>>
>> Search the list archives at: http://markmail.org/search/?q=ParaView
>>
>> Follow this link to subscribe/unsubscribe:
>> https://public.kitware.com/mailman/listinfo/paraview
>>
>>
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at http://www.kitware.com/
> opensource/opensource.html
>
> Please keep messages on-topic and check the ParaView Wiki at:
> http://paraview.org/Wiki/ParaView
>
> Search the list archives at: http://markmail.org/search/?q=ParaView
>
> Follow this link to subscribe/unsubscribe:
> https://public.kitware.com/mailman/listinfo/paraview
>
>


-- 
Cory Quammen
Staff R&D Engineer
Kitware, Inc.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://public.kitware.com/pipermail/paraview/attachments/20180430/00b69a6e/attachment.html>


More information about the ParaView mailing list