Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #69040

Re: [newbie] confusion concerning fetching an element in a 2d-array

Path csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!news.mixmin.net!feeds.phibee-telecom.net!newsfeed.xs4all.nl!newsfeed4a.news.xs4all.nl!xs4all!newsgate.cistron.nl!newsgate.news.xs4all.nl!post.news.xs4all.nl!not-for-mail
Return-Path <python-python-list@m.gmane.org>
X-Original-To python-list@python.org
Delivered-To python-list@mail.python.org
X-Spam-Status OK 0.002
X-Spam-Evidence '*H*': 1.00; '*S*': 0.00; 'subject:: [': 0.04; 'interpreter': 0.05; 'element': 0.07; 'error:': 0.07; 'string': 0.09; '3.0,': 0.09; 'answering': 0.09; 'data:': 0.09; 'received:80.91': 0.09; 'received:80.91.229': 0.09; 'received:gmane.org': 0.09; 'received:list': 0.09; 'strings.': 0.09; 'way:': 0.09; 'python': 0.11; '6.0': 0.16; '6.0,': 0.16; 'array.': 0.16; 'indexerror:': 0.16; 'numpy': 0.16; 'received:80.91.229.3': 0.16; 'received:dip0.t-ipconnect.de': 0.16; 'received:plane.gmane.org': 0.16; 'received:t-ipconnect.de': 0.16; 'simulate': 0.16; 'subject:array': 0.16; 'two,': 0.16; 'index': 0.16; 'fix': 0.17; 'wrote:': 0.18; 'library': 0.18; 'subject:] ': 0.20; 'seems': 0.21; 'feb': 0.22; '>>>': 0.22; 'import': 0.22; 'putting': 0.22; 'print': 0.22; 'header:User- Agent:1': 0.23; 'entries': 0.24; "shouldn't": 0.24; 'looks': 0.24; 'question': 0.24; 'sort': 0.25; 'script': 0.25; 'task': 0.26; 'pass': 0.26; 'values': 0.27; 'header:X-Complaints-To:1': 0.27; 'tried': 0.27; 'point': 0.28; 'function': 0.29; 'array': 0.29; 'specified': 0.30; "i'm": 0.30; 'work.': 0.31; 'code': 0.31; 'lines': 0.31; '-0700,': 0.31; 'cells': 0.31; 'inspect': 0.31; 'jean': 0.31; 'steven': 0.31; 'yes.': 0.31; 'anyone': 0.31; 'file': 0.32; 'lists': 0.32; 'run': 0.32; 'another': 0.32; 'text': 0.33; 'running': 0.33; 'guess': 0.33; 'skip:# 10': 0.33; 'totally': 0.33; 'comment': 0.34; 'problem': 0.35; "can't": 0.35; 'common': 0.35; 'tool': 0.35; 'convert': 0.35; 'but': 0.35; 'there': 0.35; 'really': 0.36; 'doing': 0.36; 'thanks': 0.36; "i'll": 0.36; 'should': 0.36; 'wrong': 0.37; 'so,': 0.37; 'list': 0.37; 'step': 0.37; 'e.g.': 0.38; 'skip:[ 10': 0.38; 'to:addr :python-list': 0.38; 'previous': 0.38; 'rather': 0.38; 'little': 0.38; 'explain': 0.39; 'sure': 0.39; 'to:addr:python.org': 0.39; 'received:org': 0.40; 'how': 0.40; 'skip:u 10': 0.60; 'read': 0.60; '2nd': 0.60; 'most': 0.60; 'tell': 0.60; 'break': 0.61; 'numbers': 0.61; 'first': 0.61; "you'll": 0.62; 'address': 0.63; 'skip:n 10': 0.64; 'more': 0.64; 'different': 0.65; 'dear': 0.65; 'fire': 0.65; 'here': 0.66; 'mar': 0.68; 'invalid': 0.68; "'2',": 0.84; '2014,': 0.84; '4.0,': 0.84; 'dimensional': 0.84; 'replicate': 0.84; 'try,': 0.84; 'friend!': 0.93
X-Injected-Via-Gmane http://gmane.org/
To python-list@python.org
From Peter Otten <__peter__@web.de>
Subject Re: [newbie] confusion concerning fetching an element in a 2d-array
Date Tue, 25 Mar 2014 17:12:12 +0100
Organization None
References <82a05fdc-1f5c-4c9b-9718-09930977268c@googlegroups.com> <53316211$0$29994$c3e8da3$5496439d@news.astraweb.com> <dba12f0e-f169-430a-9785-b98841fd55d0@googlegroups.com>
Mime-Version 1.0
Content-Type text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding 7Bit
X-Gmane-NNTP-Posting-Host p57bd8774.dip0.t-ipconnect.de
User-Agent KNode/4.11.5
X-BeenThere python-list@python.org
X-Mailman-Version 2.1.15
Precedence list
List-Id General discussion list for the Python programming language <python-list.python.org>
List-Unsubscribe <https://mail.python.org/mailman/options/python-list>, <mailto:python-list-request@python.org?subject=unsubscribe>
List-Archive <http://mail.python.org/pipermail/python-list/>
List-Post <mailto:python-list@python.org>
List-Help <mailto:python-list-request@python.org?subject=help>
List-Subscribe <https://mail.python.org/mailman/listinfo/python-list>, <mailto:python-list-request@python.org?subject=subscribe>
Newsgroups comp.lang.python
Message-ID <mailman.8526.1395763950.18130.python-list@python.org> (permalink)
Lines 157
NNTP-Posting-Host 2001:888:2000:d::a6
X-Trace 1395763950 news.xs4all.nl 2942 [2001:888:2000:d::a6]:43371
X-Complaints-To abuse@xs4all.nl
Xref csiph.com comp.lang.python:69040

Show key headers only | View raw


Jean Dubois wrote:

> Op dinsdag 25 maart 2014 12:01:37 UTC+1 schreef Steven D'Aprano:
>> On Tue, 25 Mar 2014 03:26:26 -0700, Jean Dubois wrote:
>>
>> > I'm confused by the behaviour of the following python-script I wrote:
>> > 
>> > #!/usr/bin/env python
>> > #I first made a data file 'test.dat' with the following content
>> > #1.0 2 3
>> > #4 5 6.0
>> > #7 8 9
>> > import numpy as np
>> > lines=[line.strip() for line in open('test.dat')]
>> > #convert lines-list to numpy-array
>> > array_lines=np.array(lines)
>> > #fetch element at 2nd row, 2nd column:
>> > print array_lines[1, 1]
>> > 
>> > 
>> > When running the script I always get the following error: IndexError:
>> > invalid index
>> > 
>> > Can anyone here explain me what I am doing wrong and how to fix it?
>>
>> Yes. Inspect the array by printing it, and you'll see that it is a one-
>> dimensional array, not two, and the entries are strings:
>>
>>
>> py> import numpy as np
>> py> # simulate a text file
>> ... data = """1.0 2 3
>> ... 4 5 6.0
>> ... 7 8 9"""
>> py> lines=[line.strip() for line in data.split('\n')]
>> py> # convert lines-list to numpy-array
>> ... array_lines = np.array(lines)
>> py> print array_lines
>> ['1.0 2 3' '4 5 6.0' '7 8 9']
>>
>>
>> The interactive interpreter is your friend! You never need to guess what
>> the problem is, Python has powerful introspection abilities, one of the
>> most powerful is also one of the simplest: print. Another powerful tool
>> in the interactive interpreter is help().
>>
>> So, what to do about it? Firstly, convert your string read from a file
>> into numbers, then build your array. Here's one way:
>>
>> py> values = [float(s) for s in data.split()]
>> py> print values
>> [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]
>> py> array_lines = np.array(values)
>> py> array_lines = array_lines.reshape(3, 3)
>> py> print array_lines
>> [[ 1.  2.  3.]
>>  [ 4.  5.  6.]
>>  [ 7.  8.  9.]]
>>
> Dear Steve,
> Thanks for answering my question but unfortunately now I'm totally
> confused.
> Above I see parts from different programs which I can't
> assemble together to one working program (I really tried hard).
> Can I tell from your comment I shouldn't use numpy?
> I also don't see how to get the value an element specified by (row,
> column) from a numpy_array like "array_lines" in my original code
> 
> All I need is a little python-example reading a file with e.g. three lines
> with three numbers per line and putting those numbers  as floats in a
> 3x3-numpy_array, then selecting an element from that numpy_array using
> it's row and column-number.

I'll try, too, but be warned that I'm using the same methology as Steven. 
Try to replicate every step in the following exploration.

First let's make sure we start with the same data:

$ cat test.dat
1.0 2 3
4 5 6.0
7 8 9

Then fire up the interactve interpreter:

$ python
Python 2.7.5+ (default, Feb 27 2014, 19:37:08) 
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> lines = [line.strip() for line in open("test.dat")]
>>> lines
['1.0 2 3', '4 5 6.0', '7 8 9']

As you can see lines is a list of three strings.
Let's break these strings into parts:

>>> cells = [line.split() for line in lines]
>>> cells
[['1.0', '2', '3'], ['4', '5', '6.0'], ['7', '8', '9']]

We now have a list of lists of strings and you can address individual items 
with

>>> cells[1][2]
'6.0'

What happens when pass this list of lists of strings to the numpy.array() 
constructor?

>>> a = numpy.array(cells)
>>> a
array([['1.0', '2', '3'],
       ['4', '5', '6.0'],
       ['7', '8', '9']], 
      dtype='|S3')
>>> a[1,2]
'6.0'

It sort of works, but the array entries are strings rather than floating 
point numbers. Let's fix that:

>>> a = numpy.array(cells, dtype=float)
>>> a
array([[ 1.,  2.,  3.],
       [ 4.,  5.,  6.],
       [ 7.,  8.,  9.]])
>>> a[1,2]
6.0

OK, now we can put the previous steps into a script:

$ cat tmp.py
import numpy
cells = [line.split() for line in open("test.dat")]
a = numpy.array(cells, dtype=float)
print a[1, 2]

Run it:
$ python tmp.py
6.0

Seems to work. But reading a 2D array from a file really looks like a common  
task -- there should be a library function for that:

$ python
Python 2.7.5+ (default, Feb 27 2014, 19:37:08) 
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> numpy.loadtxt("test.dat")
array([[ 1.,  2.,  3.],
       [ 4.,  5.,  6.],
       [ 7.,  8.,  9.]])


Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[newbie] confusion concerning fetching an element in a 2d-array Jean Dubois <jeandubois314@gmail.com> - 2014-03-25 03:26 -0700
  Re: [newbie] confusion concerning fetching an element in a 2d-array Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-03-25 11:01 +0000
    Re: [newbie] confusion concerning fetching an element in a 2d-array Jean Dubois <jeandubois314@gmail.com> - 2014-03-25 06:47 -0700
      Re: [newbie] confusion concerning fetching an element in a 2d-array Dave Angel <davea@davea.name> - 2014-03-25 10:42 -0400
        Re: [newbie] confusion concerning fetching an element in a 2d-array Mark H Harris <harrismh777@gmail.com> - 2014-03-25 11:40 -0500
        Re: [newbie] confusion concerning fetching an element in a 2d-array Mark H Harris <harrismh777@gmail.com> - 2014-03-25 11:40 -0500
        Re: [newbie] confusion concerning fetching an element in a 2d-array Jean Dubois <jeandubois314@gmail.com> - 2014-03-25 11:58 -0700
          Re: [newbie] confusion concerning fetching an element in a 2d-array Joel Goldstick <joel.goldstick@gmail.com> - 2014-03-25 15:15 -0400
            Re: [newbie] confusion concerning fetching an element in a 2d-array Jean Dubois <jeandubois314@gmail.com> - 2014-03-26 01:48 -0700
          Re: [newbie] confusion concerning fetching an element in a 2d-array Dave Angel <davea@davea.name> - 2014-03-25 15:58 -0400
            Re: [newbie] confusion concerning fetching an element in a 2d-array Jean Dubois <jeandubois314@gmail.com> - 2014-03-26 01:47 -0700
      Re: [newbie] confusion concerning fetching an element in a 2d-array Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-03-25 15:35 +0000
      Re: [newbie] confusion concerning fetching an element in a 2d-array Peter Otten <__peter__@web.de> - 2014-03-25 17:12 +0100
        Re: [newbie] confusion concerning fetching an element in a 2d-array Jean Dubois <jeandubois314@gmail.com> - 2014-03-25 11:33 -0700

csiph-web