Help | Site Map
Connecting Tech Pros Worldwide
 
 
LinkBack Thread Tools
  #1  
Old December 17th, 2006, 06:35 PM
Evan
Guest
 
Posts: n/a
Default first and last index as in matlab

In matlab I can do the following:
Quote:
Quote:
>ind = [3,5,7,2,4,7,8,24]
ind = 3 5 7 2 4 7 8 24
Quote:
Quote:
>ind(1) ans = 3
>ind(end) ans = 24
>ind([1 end]) ans = 3 24
but I can't get the last line in python:

In [690]: ind = [3,5,7,2,4,7,8,24]
In [691]: ind[0] Out[691]: 3
In [692]: ind[-1:] Out[692]: [24]
In [693]: ??

How do I pull out multiple indices as in matlab?


Thanks, Evan

  #2  
Old December 17th, 2006, 07:05 PM
Rob Williscroft
Guest
 
Posts: n/a
Default Re: first and last index as in matlab

Evan wrote in news:1166379931.054933.77450@j72g2000cwa.googlegro ups.com in
comp.lang.python:
Quote:
In matlab I can do the following:
>
Quote:
Quote:
>>ind = [3,5,7,2,4,7,8,24]
ind = 3 5 7 2 4 7 8 24
Quote:
Quote:
>>ind(1) ans = 3
>>ind(end) ans = 24
>>ind([1 end]) ans = 3 24
>
but I can't get the last line in python:
>
In [690]: ind = [3,5,7,2,4,7,8,24]
In [691]: ind[0] Out[691]: 3
In [692]: ind[-1:] Out[692]: [24]
In [693]: ??
>
How do I pull out multiple indices as in matlab?
[ind[0], ind[-1]]

or if you need something that can be generalised:

[ind[i] for i in [0, -1]]

so if you have:

indexes_of_ind = [0, 2, -1, -2]

you can write:

[ind[i] for i in indexes_of_ind]


Rob.
--
http://www.victim-prime.dsl.pipex.com/
  #3  
Old December 17th, 2006, 07:35 PM
Paul McGuire
Guest
 
Posts: n/a
Default Re: first and last index as in matlab

"Evan" <evanmason@gmail.comwrote in message
news:1166379931.054933.77450@j72g2000cwa.googlegro ups.com...
Quote:
In matlab I can do the following:
>
Quote:
Quote:
>>ind = [3,5,7,2,4,7,8,24]
ind = 3 5 7 2 4 7 8 24
Quote:
Quote:
>>ind(1) ans = 3
>>ind(end) ans = 24
>>ind([1 end]) ans = 3 24
>
but I can't get the last line in python:
>
In [690]: ind = [3,5,7,2,4,7,8,24]
In [691]: ind[0] Out[691]: 3
In [692]: ind[-1:] Out[692]: [24]
In [693]: ??
>
How do I pull out multiple indices as in matlab?
>
>
Thanks, Evan
>
Or use the third element of a slice, which defines a stepsize, and pick a
step that will go from the first to the last element:
Quote:
Quote:
Quote:
>>lst = list("ABCDEFG")
>>lst
['A', 'B', 'C', 'D', 'E', 'F', 'G']
Quote:
Quote:
Quote:
>>lst[0::len(lst)-1]
['A', 'G']

-- Paul


  #4  
Old December 17th, 2006, 10:25 PM
Beliavsky
Guest
 
Posts: n/a
Default Re: first and last index as in matlab


Evan wrote:
Quote:
In matlab I can do the following:
>
Quote:
Quote:
ind = [3,5,7,2,4,7,8,24]
ind = 3 5 7 2 4 7 8 24
Quote:
Quote:
ind(1) ans = 3
ind(end) ans = 24
ind([1 end]) ans = 3 24
>
but I can't get the last line in python:
>
In [690]: ind = [3,5,7,2,4,7,8,24]
In [691]: ind[0] Out[691]: 3
In [692]: ind[-1:] Out[692]: [24]
In [693]: ??
>
How do I pull out multiple indices as in matlab?
If you want functionality similar to Matlab in Python, you should use
Numpy, which has the "take" function to do what you want.

  #5  
Old December 17th, 2006, 10:45 PM
Robert Kern
Guest
 
Posts: n/a
Default Re: first and last index as in matlab

Beliavsky wrote:
Quote:
Evan wrote:
Quote:
>In matlab I can do the following:
>>
Quote:
>>>ind = [3,5,7,2,4,7,8,24]
>ind = 3 5 7 2 4 7 8 24
Quote:
>>>ind(1) ans = 3
>>>ind(end) ans = 24
>>>ind([1 end]) ans = 3 24
>but I can't get the last line in python:
>>
>In [690]: ind = [3,5,7,2,4,7,8,24]
>In [691]: ind[0] Out[691]: 3
>In [692]: ind[-1:] Out[692]: [24]
>In [693]: ??
>>
>How do I pull out multiple indices as in matlab?
>
If you want functionality similar to Matlab in Python, you should use
Numpy, which has the "take" function to do what you want.
Actually, in numpy, we also have "fancy indexing" similar to Matlab's:


In [1]: from numpy import *

In [2]: ind = array([3,5,7,2,4,7,8,24])

In [3]: ind[[0, -1]]
Out[3]: array([ 3, 24])


--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco

  #6  
Old December 17th, 2006, 11:15 PM
sturlamolden
Guest
 
Posts: n/a
Default Re: first and last index as in matlab


It's quite straight forward, actually. What you need to know is that -1
is the index of the last element in a sequence, and that slicing
excludes the 'end' value in 'start:end'. So if you type arr[0:N], you
get the subsequence

[arr[0], arr[1], arr[2], ..., arr[N-1]]

When comparing with Matlab, Python slicing works like this:

arr(1:end) - arr[:] or arr[0:]
arr(1:end-1) -arr[:-1] or arr[0:-1]
arr(1:end-N) -arr[:-N] or arr[0:-N]
arr(end) -arr[-1]
arr(1) - arr[0]
arr(1:2:end) - arr[::2] or arr[0::2]
arr(1:2:end-1) -arr[:-1:2] or arr[0:-1:2]

Python slicing is not completely like Matlab, because it was adoped
from Haskell. It can do the same as Matlab's indexing, but the syntax
is different. If you think Matlab's indexing is more intuitive it is
just because you are more used to it.

  #7  
Old December 18th, 2006, 09:35 AM
Evan
Guest
 
Posts: n/a
Default Re: first and last index as in matlab

Thanks for all the replies, it's much clearer now.

-Evan

 

Bookmarks

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over network members.
Post your question now . . .
It's fast and it's free

Popular Articles