Replacing NaN elements in a wave with a number

I have a 3D wave, waveA, where some of its elements are NaN. How can I replace all of these NaN elements with a numerical value, e.g. 100.0, without using loop?
I don't know what
matrixop
does behind the scenes but I suspect it is something like this, in other words, a hidden loop:


variable v_val = 99
waveA = (numtype(waveA[p]) == 2) ? v_val : waveA[p]


where
v_val
is the value you want to change the
NaNs
to (i.e.
99
in this case).

I don't know how the snippet is optimized internally by the igor pro interpreter, so it may be slower than using
matrixop
. But the snippet above allows you to build other logical functions/ filters for wave elements.

best,
_sk
Thanks for you both, it seems like matrixop is faster but it's also good to have other form of codes which does the same and can be generalized to another wave filtering operation.
It goes without saying that in 3D one would have to traverse over all dimensions, i.e.:
waveA = (numtype(waveA[p][q][r]) == 2) ? 99 : waveA


best,
_sk
_sk wrote: I don't know what
matrixop
does behind the scenes but I suspect it is something like this, in other words, a hidden loop:


variable v_val = 99
waveA = (numtype(waveA[p]) == 2) ? v_val : waveA[p]


where
v_val
is the value you want to change the
NaNs
to (i.e.
99
in this case).

I don't know how the snippet is optimized internally by the igor pro interpreter, so it may be slower than using
matrixop
. But the snippet above allows you to build other logical functions/ filters for wave elements.

best,
_sk


Great!!
with mutithread key word,that is why Igor so powerfull!
Hey,
sorry for leaving this thread for one day without updating. So I what I want is actually to use
interpolate3D
to get the 3D wave and for points lying outside the domain of the source wave this command will return NaN. That's why in the end my 3D wave will contain some NaN elements. However, yesterday I noticed that with my source wave for
triangulate3D
(I need the output from this command to run the subsequent
interpolate3D
) being very large (2050401 rows and 4 cols), the execution time exceeded 24 hours until I aborted it before finish. I see someone mentioning
MultiThread
, looks like some parallel computation related term. Will it help speeding up
triangulate3D
?
tomy77 wrote: Hey,
sorry for leaving this thread for one day without updating. So I what I want is actually to use
interpolate3D
to get the 3D wave and for points lying outside the domain of the source wave this command will return NaN. That's why in the end my 3D wave will contain some NaN elements. However, yesterday I noticed that with my source wave for
triangulate3D
(I need the output from this command to run the subsequent
interpolate3D
) being very large (2050401 rows and 4 cols), the execution time exceeded 24 hours until I aborted it before finish. I see someone mentioning
MultiThread
, looks like some parallel computation related term. Will it help speeding up
triangulate3D
?


It is not practical to use triangulate3D operation for very large data sets.

In your case, I think you should think of other ways to do your work. Say, pay attention to the speciality of your data and find a spcial method just suited to your need!
The triangulation process is O(N^2) so you are really looking at a very long computation. Depending on your application you might consider reducing the amount of data that is being triangulated, grouping parts of the data, triangulating and interpolating in smaller groups and similar approaches where you simply reduce the size of N.