Hi Gabriel,

The comprehension approach, as suggested by Steven Johnson earlier in this
thread, is currently the most Julian way to deal with this.

The problem with map-like approaches are that, currently, the return type
of the function being applied cannot be inferred, so you end up with an
untyped (Any) array and poor performance.  See this old comment
<https://github.com/JuliaLang/julia/issues/670#issuecomment-4987229> for
more background.

(I'm wondering if it's possible to alleviate some of this problem in v0.4
with staged functions...)

Cheers,
   Kevin

On Sun, Feb 8, 2015 at 8:37 AM, Gabriel Mitchell <[email protected]>
wrote:

> For a gnerally binary operator I would personally do something like
>
> x = 1:5
> f = +
> map(f,x[1:end-1],x[2:end])
>
> This pattern has obvious generalizations to the n-ary case. In clojure
> data analysis you see a lot composition of the map and
> partition/partitionby/etc functions (the partition* functions in clojure
> break up sequences into a sequence of windows). I know julia is not clojure
> but I think the window and map pattern accurately reflects the way many
> scientific programmers think about this type of operation, which is
> relatively common across a number of domains. As such I think it would be
> nice to establish some kind of terse but idiomatic way of writing these
> thing in julia (@Evan thanks for the question!).
>
> Leaving implementation details aside I'll start the discussion by
> advocating for something like
>
> mapnwise{N,T}(f::Function,n::Int,x::AbstractArray{N,T}) = ...
>
> There could also be an argument for other windowing schemes, but this
> would be a start.
>
> where the signature of f is
>
> On Saturday, February 7, 2015 at 1:19:39 PM UTC+1, Evan Pu wrote:
>>
>> say I want to compute a pair-wise diff for all the elements in the array.
>> input:        [1, 2, 4, 7, 8]
>> output:        [1, 2, 3, 1]
>>
>> is there some kind of "beautiful" way of doing it? i.e. w/o using a for
>> loop nor using explicit indecies
>>
>

Reply via email to