[Numpy-discussion] loop vectorization

qubax@g... qubax@g...
Fri Mar 11 13:07:49 CST 2011

```we have had that discussion about ... two days ago. please look up
'How to sum weighted matrices' with at least two efficient solutions.

On Fri, Mar 11, 2011 at 02:00:09PM -0500, Josh Hykes wrote:
>    I think you can use tensordot here.  Maybe something like the
>    following:
>
>    from numpy.random import random
>    import numpy as np
>    ni, nj, nk = 4, 5, 6
>    bipData = random((ni,nj,nk))
>    data1 = np.zeros((nk,nk))
>    # loop
>    for i in range(nj):
>        data1 += np.dot(np.transpose(bipData[:,i,:]), bipData[:,i,:])
>    # tensordot
>    axes_list = [(1,2), (1,0)]
>    data2 = np.tensordot(bipData.T, bipData, axes=axes_list)
>    diff = np.max((data1 - data2)/data1)
>    print diff
>    I hope this helps.
>    -Josh
>    On Fri, Mar 11, 2011 at 1:13 PM, Thomas K Gamble <[1]tkg@lanl.gov>
>    wrote:
>
>    I have the followin loop in my code:
>
>    for i in range(0, nFrames):
>
>    data += dot(transpose(bipData[:,i,:]), bipData[:,i,:])
>
>    bipData is a 1024x258x256 double precision float array.
>
>    The loop takes all of 15 seconds to run on my computer and, with
>    several hundred files to process...
>
>    Is there a way to do something like:
>
>    data = sum(dot(transpose(bipData), bipData))
>
>    with dot done on the desired axis of bipData?
>
>    This might give a fair speed increase. Or perhaps a different approach
>    I'm not seeing?
>
>    --
>
>    Thomas K. Gamble
>
>
>    Chemical Diagnostics and Engineering (C-CDE)
>
>    Los Alamos National Laboratory
>
>    MS-E543,p:[2]505-665-4323 f:[3]505-665-4267
>
>    "There cannot be a crisis next week. My schedule is already full."
>
>    Henry Kissinger
>
>      _______________________________________________
>      NumPy-Discussion mailing list
>      [4]NumPy-Discussion@scipy.org
>      [5]http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
>    --
>    Josh Hykes
>    (717) 742-0264
>    [6]jmhykes@ncsu.edu or [7]jhykes@gmail.com
>
> References
>
>    1. mailto:tkg@lanl.gov
>    2. tel:505-665-4323
>    3. tel:505-665-4267
>    4. mailto:NumPy-Discussion@scipy.org
>    5. http://mail.scipy.org/mailman/listinfo/numpy-discussion
>    6. mailto:jmhykes@ncsu.edu
>    7. mailto:jhykes@gmail.com

> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion

--
There are two things children should get
from their parents: roots and wings.

The king who needs to remind his people of his rank, is no king.

A beggar's mistake harms no one but the beggar. A king's mistake,
however, harms everyone but the king. Too often, the measure of
power lies not in the number who obey your will, but in the number