I'm trying to adapt this to use to unwrap along arbitrary dimensions in an
array and having a bit of trouble wrapping my head around how to manage it.

I can compute the phase difference between adjacent slices using slicedim,
and computing the new phase value isn't hard, but i need to assign the
result back to the array, basically treating slicedim as a view (which
doesn't work). How should I do this?

Here's what I have so far (with the failing assignment into the slicedim):

function unwrap!(m::Array, dim::Integer=ndims(m))
    if size(m, dim) < 2
        return m
    end
    for i = 2:size(m, dim)
        d = slicedim(m, dim, i) - slicedim(m, dim, i-1)
        slicedim(m, dim, i) -= floor((d+pi) / (2pi)) * 2pi
    end
    return m
end



On Tue, Dec 17, 2013 at 10:50 PM, Spencer Russell <[email protected]> wrote:

> Ah, thanks for the tip on the in-place/out-of-place idiom, and good point
> on the faster unwrap.
>
> -s
>
>
> On Tue, Dec 17, 2013 at 8:58 PM, Steven G. Johnson 
> <[email protected]>wrote:
>
>>
>>
>> On Tuesday, December 17, 2013 8:55:51 PM UTC-5, Steven G. Johnson wrote:
>>
>>> Also, note that you should be able to use truncated division rather than
>>> loops to add/subtract the correct multiple of 2pi, as in my snippet.
>>>
>>
>> (The problem with loops is that I can easily imagine data for which the
>> nested-loops version is O(n^2) or worse rather than O(n), simply by having
>> the phase grow linearly or faster with n.)
>>
>
>

Reply via email to