from numpy array to csv - rounding - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: from numpy array to csv - rounding (/thread-38706.html) |
from numpy array to csv - rounding - SchroedingersLion - Nov-14-2022 Greetings, I have a 2D numpy array ARRstoring a bunch of floats. I want to print it row by row to a .csv file, but rounded to 3 significant digits. Is there a simple way to do this? This is what I currently have. It prints the array without rounding. with open('./results', 'w') as f: writer = csv.writer(f, delimiter=" ") for row in ARR: writer.writerow(row)Cheers! RE: from numpy array to csv - rounding - snippsat - Nov-14-2022 Take into Pandas the can use .to_csv with float_format .import numpy as np import pandas as pd arr_rand = np.random.rand(3,4) df = pd.DataFrame(arr_rand) >>> df 0 1 2 3 0 0.440761 0.337663 0.372010 0.892344 1 0.952017 0.747404 0.787696 0.338794 2 0.690075 0.061731 0.541146 0.968825 >>> print(df.to_csv(index=False, header=False, line_terminator='\n', float_format='%.3f').strip()) 0.441,0.338,0.372,0.892 0.952,0.747,0.788,0.339 0.690,0.062,0.541,0.969 RE: from numpy array to csv - rounding - deanhystad - Nov-14-2022 The simplest way might be to use pandas. import numpy as np import pandas as pd # Make a float numpy array data = np.array([[a/b for b in range(1,11)] for a in range(1,11)]) # Write to csv file df = pd.DataFrame(data) df.to_csv("test.csv", index=False, header=False) Another way to do this is convert all the numbers to strings and write the strings to the csv file.
RE: from numpy array to csv - rounding - SchroedingersLion - Nov-14-2022 Thank you, you two! I just found another way. Apparently, numpy offers a rounding function for their arrays, so one can just call ARR.round(decim)where ARRis a numpy array to be rounded to decimsignifiant figures. Then my snippet from above can be used. RE: from numpy array to csv - rounding - deanhystad - Nov-14-2022 I was solving the wrong problem. I saw CSV and rounding and immediately jumped to the conclusion that you were not happy about losing precision when saving your numpy array to a file. That is the complaint in 99.9% of posts that include "csv" and "rounding" in their topic. Sorry for wasting your time. Curious though, why do you want to round floats to 3 digits in a csv file? It's not like csv is a presentation format. RE: from numpy array to csv - rounding - SchroedingersLion - Nov-14-2022 (Nov-14-2022, 08:25 PM)deanhystad Wrote: Curious though, why do you want to round floats to 3 digits in a csv file? It's not like csv is a presentation format. I want to lose precision so that the file size does not get unnecessarily large. Saving, say, 5 digits instead of the usual 15 saves a factor 3 then. I work in scientific computing and result files often store millions of floats, so stuff like this pays off. RE: from numpy array to csv - rounding - deanhystad - Nov-14-2022 Why not use a binary format? Numpy loves binary. A float is 4 bytes. More precision than 6 ascii characters (need a separator). Much faster to read and write. Or is this some kind of intermediary that has to be readable by programs where numpy is not an option? |