[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

extreme slowness in Nd array FORTRAN indexing fixed using a colon

From: Mike Miller
Subject: extreme slowness in Nd array FORTRAN indexing fixed using a colon
Date: Sat, 15 Oct 2005 14:22:25 -0500 (CDT)

I found this quite stunning. The upshot is that use of FORTRAN indexing is almost 9,000 times faster (in my examples) when a colon "(:)" is used in a 3-d array as when the colon is not used. If this is a "known issue," let me apologize in advance, but it needs to be more widely known, and if there is a way to fix this inside the Octave code, it probably should be fixed.

We are using Octave 2.1.71 with Octave-Forge on Red Hat Linux.

We are working on some m-files where we grab elements of an array and assign them to elements of another array. The way to do this quickly seems to be with FORTRAN indexing. It was conveninent to work with a 3-d array of size N x M x 2 (FYI, this is for N subjects by M genetic markers by 2 parents). In the following Octave commands, I'm just making a new matrix M1 or M2 by grabbing random elements of array H:

octave:1> H=rand(500,500,2);
octave:2> I=ceil(500000*rand(100,100));

octave:3> tic; M1=H(I); toc
ans = 38.849

octave:4> tic; M2=H(:)(I); toc
ans = 0.0044010

octave:5> sum(sum(M1==M2))
ans = 10000

octave:6> 38.849/0.0044010
ans = 8827.3

In other words, the same indexing operation on the same data data gave the same result but was 8827 times as fast when the colon operator was used. Since the output is the same with and without the colon, doesn't that mean that the colon is gratuitous? Isn't there a way to change the Octave program so that it provides the faster speed even when the colon is absent?

By the way, the colon still has a small effect when the array is a matrix instead of a 3-d array. For example, 0.00678 seconds without colon versus 0.00481 seconds with colon (41% longer without the colon). That might be important sometimes but it's nothing compared to an 8000-fold speed up!



Michael B. Miller, Ph.D.
Assistant Professor
Division of Epidemiology and Community Health
and Institute of Human Genetics
University of Minnesota

Octave is freely available under the terms of the GNU GPL.

Octave's home on the web:
How to fund new projects:
Subscription information:

reply via email to

[Prev in Thread] Current Thread [Next in Thread]