On Tue, 2016-09-13 at 14:26, Neal Becker <[email protected]> wrote:
> So you're saying that abs2.(x .- y.') will not allocate a 2d array and then
> pass to abs2?  That's great!  But how would I know that?

The operators do not do the fusing yet, check right at the bottom of the
linked manual section.  I think you can work around it by using their
functional form:

x .+ y # not fused
(+).(x,y) # fused

So:

out .= abs2.((-).(x, y.'))

> DNF wrote:
>
>> For your particular example, it looks like what you want is (and I am just
>> guessing what mag_sqr means):
>> dist = abs2.(x .- y.')
>> The performance should be the similar to a hand-written loop on version
>> 0.5.
>>
>> You can read about it here:
>> http://docs.julialang.org/en/release-0.5/manual/functions/#dot-syntax-for-vectorizing-functions
>>
>>
>> On Monday, September 12, 2016 at 9:29:15 PM UTC+2, Neal Becker wrote:
>>>
>>> Some time ago I asked this question
>>>
>>> http://stackoverflow.com/questions/25486506/julia-broadcasting-equivalent-of-numpy-newaxis
>>>
>>> As a more interesting example, here is some real python code I use:
>>> dist = mag_sqr (demod_out[:,np.newaxis] - const.map[np.newaxis,:])
>>>
>>> where demod_out, const.map are each vectors, mag_sqr performs
>>> element-wise euclidean distance, and the result is a 2D array whose 1st
>>> axis matches the
>>> 1st axis of demod_out, and the 2nd axis matches the 2nd axis of
>>> const.map.
>>>
>>>
>>> From the answers I've seen, julia doesn't really have an equivalent
>>> functionality.  The idea here is, without allocating a new array,
>>> manipulate
>>> the strides to cause broadcasting.
>>>
>>> AFAICT, the best for Julia would be just forget the vectorized code, and
>>> explicitly write out loops to perform the computation.  OK, I guess, but
>>> maybe not as readable.
>>>
>>> Is there any news on this front?
>>>
>>>

Reply via email to