Fast (compiled) routine for element testing and replacement in large matrices?

• To: mathgroup at smc.vnet.net
• Subject: [mg23929] Fast (compiled) routine for element testing and replacement in large matrices?
• From: "Gareth J. Russell" <russell at cerc.columbia.edu>
• Date: Fri, 16 Jun 2000 00:57:08 -0400 (EDT)
• Sender: owner-wri-mathgroup at wolfram.com

```Hello,

My first post. I am moving from another software package to Mathematica, and
I often work with very large matrices in the context of simulations, so
speed is important. Here is a problem for which I would like a serious speed
increase.

Given a matrix of real numbers, I want to generate a new matrix where
values from a certain range are replaced with 1, and the remainder with
zero. Matrix size is often on the order of 1000 by 1000 (they are always
square).

I defined a function that does the comparison using If[],

d2wreal[w_,l_,u_] := If[(w>l)&&(D<=u),1,0]
SetAttributes[d2wreal,Listable]

These are typical times:

a = Table[Random[], {i, 1, 100}, {j, 1, 100}];
t = Timing[b = d2wreal[a, 0.2, 0.4]][[1]]
0.46666666666666856 Second

a = Table[Random[], {i, 1, 1000}, {j, 1, 1000}];
t = Timing[b = d2wreal[a, 0.2, 0.4]][[1]]
65.55 Second

I tried to generate some compiled alternatives myself, but I couldn't find
one that was faster. I reckon a 10x speed-up should be possible, possibly
more. My other software takes only 0.75 seconds for the 1000 by 1000 matrix
function.

Can anyone suggest a way to speed this up?

Thanks,

Gareth

==================================================
Dr. Gareth J. Russell

NEW ADDRESS and E-MAIL FROM 1ST SEPTEMBER, 1999

Center for Environmental Research and Conservation
MC 5556
Columbia University
1200 Amsterdam Avenue
New York, NY 10027, U.S.A.

Phone: ++1 212 854 5094
Fax: ++1 212 854 8188
E-mail: russell at cerc.columbia.edu
WWW: http://web.utk.edu/~grussell   (NO CHANGE)

OLD ADDRESS (AND STILL MY EMPLOYERS)

Department of Ecology and Evolutionary Biology
University of Tennessee
569 Dabney Hall
Knoxville, TN 37996-1610, USA
==================================================

```

• Prev by Date: Gradient in FindMinimum
• Next by Date: Re: Sums and Products: Compact Notation and Differentiation