Re: Part

• Subject: [mg2910] Re: [mg2890] Part
• From: ptk at imada.ou.dk (Peder Thusgaard Ruhoff)
• Date: 9 Jan 1996 04:35:06 -0600
• Approved: usenet@wri.com
• Distribution: local
• Newsgroups: wri.mathgroup
• Organization: Wolfram Research, Inc.
• Sender: mj at wri.com

On Thu, 4 Jan 1996, Hans Steffani wrote:

> w={{1,2,3},{4,5,6},{7,8,9}}
> npos={2,1}
>
> npos is the position of the element I need.
>
> w[[npos]]
>
> does not work, as it returns the second and the first
> line.
>
> w[[ npos[[1]],npos[[2]] ]]
>
> does the wanted thing, but I would prefer a shorter and
> more general way.
>
> Hans Friedrich Steffani

Dear Hans Steffani,

There are several ways to solve your problem.

1. Using Sequence:
==================

In[1]:= w = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

In[2]:= npos = {2, 1};

In[3]:= w[[Sequence @@ npos]]

Out[3]= 4

In[4]:= Timing[Do[w[[Sequence @@ npos]], {10000}]]

Out[4]= {4.05 Second, Null}

2. Using Fold:
==============

In[5]:= Fold[Part, w, npos]

Out[5]= 4

In[6]:= Timing[Do[Fold[Part, w, npos], {10000}]]

Out[6]= {2.46667 Second, Null}

3. Defining a new function Index:
=================================

In[7]:= Index /: Part[x_, Index[n__]] := Part[x, n]

In[8]:= npos = Index[2, 1]

Out[8]= Index[2, 1]

In[9]:= w[[npos]]

Out[9]= 4

In[10]:= Timing[Do[w[[npos]], {10000}]]

Out[10]= {4.03333 Second, Null}

All calculations done using a SUN sparc10.

I hope this helps or at least gives you some ideas.

Peder

------------------------------------------------------------------------------
Peder Thusgaard Ruhoff                     Phone: (+45) 66 15 86 96, ext. 2411
Dept. of Mathematics and Computer Science  Fax:   (+45) 65 93 26 91
Odense University, Campusvej 55            Email: ptk at imada.ou.dk
DK-5230 Odense M, DENMARK

"It is important for him who wants to discover not to confine himself
to one chapter of science, but to keep in touch with various others."