Tuples from List

R

rshepard

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
 
P

Paul Rubin

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

Robert Kern

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
 
B

Ben Finney

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:

said:
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")
 
R

rshepard

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,756
Messages
2,569,540
Members
45,025
Latest member
KetoRushACVFitness

Latest Threads

Top