2

I am new to both Python and Stackoverflow. I have a .txt file that contains floating point numbers that looks something like this:

   8.2178200e-02

8.2173600e-02 8.2129400e-02 8.2209000e-02 8.2183000e-02 8.2098900e-02 8.2162500e-02 8.2157700e-02 8.2177900e-02 8.2177600e-02 8.2088400e-02 8.2142900e-02 8.2179600e-02 8.2159200e-02 8.2144800e-02 8.2139000e-02 8.2121200e-02 8.2157900e-02 8.2142600e-02 8.2190600e-02 8.2129500e-02 8.2125800e-02 8.2097500e-02 8.2087300e-02 8.2206800e-02 8.2175400e-02 8.2183300e-02 8.2197400e-02 8.2129500e-02 8.2101600e-02 8.2117800e-02 8.2125900e-02 8.2131300e-02 8.2107600e-02 8.2146900e-02 8.2122400e-02 8.2111800e-02 8.2156100e-02 8.2088500e-02 8.2135300e-02 8.2119700e-02 8.2100800e-02 8.2135700e-02 8.2126900e-02 8.2134000e-02 8.2111000e-02 8.2101600e-02 8.2108600e-02 8.2142900e-02 8.2091000e-02 8.2117700e-02 8.2061400e-02 8.2085200e-02 8.2080400e-02 8.2075400e-02 8.2064400e-02 8.2059700e-02 8.2098200e-02 8.2077200e-02 8.2138200e-02 8.2116300e-02 8.2092000e-02 8.2071900e-02 8.2092500e-02 8.2056900e-02 8.2108900e-02 8.2061300e-02 8.2064300e-02 8.2063900e-02 8.2120600e-02 8.2049500e-02 8.2087300e-02 8.2066800e-02 8.2074900e-02 8.2052400e-02 8.2093200e-02 8.2061800e-02 8.2043700e-02 8.2070500e-02 8.2056900e-02 8.2084000e-02 8.2075900e-02 8.2065900e-02 8.2054200e-02 8.2037400e-02 8.2040600e-02 8.2085500e-02 8.2029000e-02 8.2057000e-02 8.2045700e-02 8.2112600e-02 8.2068000e-02 8.2034900e-02 8.2045200e-02 8.2046400e-02 8.2067300e-02 8.2080500e-02 8.2021400e-02 8.2047300e-02 8.2060200e-02 8.2042900e-02 8.2065200e-02 8.2056100e-02 8.1990900e-02 8.2055700e-02 8.2030300e-02 8.2103400e-02 8.2092600e-02 8.1995200e-02 8.2075300e-02 8.2001500e-02 8.2064000e-02 8.2033500e-02 8.2042800e-02 8.2037400e-02 8.2002000e-02 8.2057900e-02 8.2025100e-02 8.2038900e-02 8.2035200e-02 8.2005700e-02 8.2016700e-02 8.2012800e-02 8.1984900e-02 8.2066200e-02 8.2029600e-02 8.2027400e-02 8.2012200e-02 8.2009400e-02 8.2024900e-02 8.2038700e-02 8.2034700e-02 8.2016200e-02 8.1964500e-02 8.2019400e-02 8.2010500e-02 8.2004100e-02 8.2057500e-02 8.2052300e-02 8.2004500e-02 8.1998400e-02 8.2011600e-02 8.2038400e-02 8.2002500e-02 8.2005700e-02 8.2065900e-02 8.1991200e-02 8.2039900e-02 8.2028200e-02 8.2027000e-02 8.2021300e-02 8.2019600e-02 8.2032900e-02 8.2011700e-02 8.2017400e-02 8.2069400e-02 8.1998400e-02 8.2059400e-02 8.1958300e-02 8.1995800e-02 8.2018500e-02 8.1973400e-02 8.2008800e-02 8.1995900e-02 8.1989400e-02 8.1991800e-02 8.2000600e-02 8.2040400e-02 8.2035700e-02 8.1987800e-02 8.2027400e-02 8.2010800e-02 8.1991300e-02 8.1999400e-02 8.1926800e-02 8.2021100e-02 8.1967800e-02 8.1992600e-02 8.2022200e-02 8.1933100e-02 8.1998900e-02 8.2004300e-02

How can I build a program that put this data into a string, which I need to use to get frequency response and plot the data using Matplotlib? The amount of data will be unknown. For the y-axis, data points are plotted. for x-axis, the number increments by 1, [0,1,2,3,4,5,6...n]. If there is a better way to implement this, please elaborate. Thanks you!

2
  • 2
    Can you show us what you have tried? You will get better response here if you have some code you need fixed, rather than a list of specifications. Commented Sep 30, 2013 at 18:53
  • 1
    and welcome to SO! People here can be prickly, don't take it personally. Please read the stackoverflow.com/help Commented Sep 30, 2013 at 18:55

3 Answers 3

1

Use numpy to read the data into an array of floats, plot that against the range(len(your_array)), show the plot.

Sign up to request clarification or add additional context in comments.

Comments

1

To avoid loading the whole file into memory, you could read them off one at a time like this:

import matplotlib.pyplot as plt
with open('number_file.txt', 'r') as f:
    number_string = f.read(13) # 13 characters in each number
    x_index = 0
    while number_string != '':
        plt.plot([x_index], [float(number_string)], 'ob')
        # print(x_index, number_string)
        f.read(1) # this throws away the extra space
        number_string = f.read(13)
        x_index += 1

plt.show()

This assumes the numbers and spacing is always in that exact format.

6 Comments

the file can be downloaded below. the amount of data is too large to use this method i guess. Thanks for you support. facebook.com/ajax/messaging/…
I'd rather keep all the information on this page so it is visible to other helpers or people with the same problem Try copying the first several lines of the data file and pasting it into your problem. Select it and press the {} icon in the toolbar to format it. Most large data files have one entry on each line, and if this is the case, it would simplify the solution. Otherwise, the only way to upload the whole file is on an external site like one of these and then link to it in your question.
i have followed your instruction and post it. just a couple lines from my data files are copied. it is a large data file. But i think it should be fine, because my prof used it as an example in his matlab research paper.
Just FYI: With matplotlib, this is less memory efficient than just reading the entire array into memory in the first place.
@Justin This method works in this case. But the next step is to take the fourier transform to obtain frequency response. is it going to cause any problems? Just asking, not meaning to give your further work.
|
1

You mentioned wanting information on the frequency information. If you're looking for a power spectral density plot, have a look at matplotlib.pyplot.psd.

For example, with the data you posted above:

import numpy as np
import matplotlib.pyplot as plt

data = np.loadtxt('yourdata.txt')
plt.psd(data)
plt.show()

enter image description here

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.