Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   Tuples from List (http://www.velocityreviews.com/forums/t399610-tuples-from-list.html)

rshepard@nospam.appl-ecosys.com 02-28-2007 12:48 AM

Tuples from List
 
While it should be easy for me to get what I need from a list, it's
proving to be more difficult than I expected.

I start with this list:

[ 6.24249034e-01+0.j 5.11335982e-01+0.j 3.67333773e-01+0.j
3.01189122e-01+0.j 2.43449050e-01+0.j 1.82948476e-01+0.j
1.43655139e-01+0.j 9.91225725e-02+0.j]

and I want a list of floats of only the first 6 digits for each value. If I
write:
for i in listname:
print i

I get this:

(0.624249034424+0j)
(0.511335982206+0j)
(0.367333773283+0j)
(0.301189121704+0j)
(0.243449050439+0j)
(0.182948475822+0j)
(0.14365513894+0j)
(0.0991225725344+0j)

I know it's embarrassingly simple, but the correct syntax eludes my
inexperienced mind. What I want is a list [0.62424, 0.51133, ...] so that I
can normalize those values.

What is the correct syntax, please?

Rich

Paul Rubin 02-28-2007 12:59 AM

Re: Tuples from List
 
rshepard@nospam.appl-ecosys.com writes:
> [ 6.24249034e-01+0.j 5.11335982e-01+0.j 3.67333773e-01+0.j
> 3.01189122e-01+0.j 2.43449050e-01+0.j 1.82948476e-01+0.j
> 1.43655139e-01+0.j 9.91225725e-02+0.j]
>
> and I want a list of floats of only the first 6 digits for each value. If I
> write:
> for i in listname:
> print i


If you mean the first six digits of the real part and they're all < 1,

for z in listname:
print '%.5f' % z.real

Robert Kern 02-28-2007 12:59 AM

Re: Tuples from List
 
rshepard@nospam.appl-ecosys.com wrote:
> While it should be easy for me to get what I need from a list, it's
> proving to be more difficult than I expected.
>
> I start with this list:
>
> [ 6.24249034e-01+0.j 5.11335982e-01+0.j 3.67333773e-01+0.j
> 3.01189122e-01+0.j 2.43449050e-01+0.j 1.82948476e-01+0.j
> 1.43655139e-01+0.j 9.91225725e-02+0.j]


No, that's a numpy array.

> and I want a list of floats of only the first 6 digits for each value. If I
> write:
> for i in listname:
> print i
>
> I get this:
>
> (0.624249034424+0j)
> (0.511335982206+0j)
> (0.367333773283+0j)
> (0.301189121704+0j)
> (0.243449050439+0j)
> (0.182948475822+0j)
> (0.14365513894+0j)
> (0.0991225725344+0j)


Those aren't tuples, but complex numbers.

> I know it's embarrassingly simple, but the correct syntax eludes my
> inexperienced mind. What I want is a list [0.62424, 0.51133, ...] so that I
> can normalize those values.
>
> What is the correct syntax, please?


# Extract the real components (since the imaginary components are all 0):
eigvals = eigvals.real

# Normalize the eigenvalues:
eigvals /= eigvals.sum()

--
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


Ben Finney 02-28-2007 01:04 AM

Re: Tuples from List
 
rshepard@nospam.appl-ecosys.com writes:

> While it should be easy for me to get what I need from a list, it's
> proving to be more difficult than I expected.
>
> I start with this list:
>
> [ 6.24249034e-01+0.j 5.11335982e-01+0.j 3.67333773e-01+0.j
> 3.01189122e-01+0.j 2.43449050e-01+0.j 1.82948476e-01+0.j
> 1.43655139e-01+0.j 9.91225725e-02+0.j]


That's not correct syntax for a list. I assume, then, that it's not
actual code from your program.

> and I want a list of floats of only the first 6 digits for each value.


You don't get to choose how many digits are represented in a float
value; that's a property of the underlying floating-point
implementation, and indeed will change depending on the actual value
(since a float is a *binary* representation of a number, not decimal).

Perhaps you are looking for the Decimal type:

<URL:http://docs.python.org/lib/module-decimal.html>

> for i in listname:
> print i
>
> I get this:
> [each item printed separately]
>
> I know it's embarrassingly simple, but the correct syntax eludes
> my inexperienced mind. What I want is a list [0.62424, 0.51133, ...]
> so that I can normalize those values.


You can create a new list from any sequence value by using the
constructor for the list type:

>>> old_sequence = [12, 34, 56]
>>> new_list = list(old_sequence)
>>> new_list[0]

12

As for making a list containing different values (e.g. Decimal
values), you might want a list comprehension:

>>> from decimal import Decimal
>>> old_sequence = [12, 34, 56]
>>> new_list = [Decimal(value) for value in old_sequence]
>>> new_list[0]

Decimal("12")

--
\ "I may disagree with what you say, but I will defend to the |
`\ death your right to mis-attribute this quote to Voltaire." -- |
_o__) Avram Grumer, rec.arts.sf.written, May 2000 |
Ben Finney


rshepard@nospam.appl-ecosys.com 02-28-2007 01:47 AM

Re: Tuples from List
 
On 2007-02-28, Robert Kern <robert.kern@gmail.com> wrote:

> No, that's a numpy array.


Robert,

That's where I went off. I forgot that I'm still dealing with a 1D NumPy
array and not a list. No wonder I had such fits!

> Those aren't tuples, but complex numbers.


I have not seen the 'j' suffix before. That was throwing me.

> # Extract the real components (since the imaginary components are all 0):
> eigvals = eigvals.real


That's so much easier than what I ended up doing, which was creating
another variable and assigning to that an explicit cast to real of the
array.

> # Normalize the eigenvalues:
> eigvals /= eigvals.sum()


Now that's really nice!

Thank you very much for today's lessons. I really appreciate them

Rich


All times are GMT. The time now is 04:52 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.