Write float arrays to a text file: Difference between revisions

From Rosetta Code
Content added Content deleted
(Ada example)
m (→‎{{header|Python}}: Changed over to works with template)
Line 43: Line 43:


=={{header|Python}}==
=={{header|Python}}==
'''Interpreter:''' [[Python]] 2.6
{{works with|Python|2.6}}
[[Category:Python]]
import itertools
import itertools
def writedat(filename, x, y, xprecision=3, yprecision=5):
def writedat(filename, x, y, xprecision=3, yprecision=5):
Line 50: Line 49:
for a, b in itertools.izip(x, y):
for a, b in itertools.izip(x, y):
f.write("%.*g\t%.*g\n" % (xprecision, a, yprecision, b))
f.write("%.*g\t%.*g\n" % (xprecision, a, yprecision, b))
===Example===
==Example==
>>> import math
>>> import math
>>> x = [1, 2, 3, 1e11]
>>> x = [1, 2, 3, 1e11]

Revision as of 15:06, 19 February 2008

Task
Write float arrays to a text file
You are encouraged to solve this task according to the task description, using any language you may know.

Write two equal-sized numerical arrays `x' and `y' to a two-column text file named `filename'.

The first column of the file contains values from an `x'-array with a given `xprecision', the second -- values from `y'-array with `yprecision'.

For example, considering:

   x = {1, 2, 3, 1e11};
   y = {1, 1.4142135623730951, 1.7320508075688772, 316227.76601683791}; /* sqrt(x) */
   xprecision = 3;
   yprecision = 5;

The file is:

   1    1
   2    1.4142
   3    1.7321
   1e+011   3.1623e+005

This task is intended as a subtask for Measure relative performance of sorting algorithms implementations.

Ada

with Ada.Text_Io;
with Ada.Float_Text_Io;
with Ada.Numerics.Elementary_Functions; use Ada.Numerics.Elementary_Functions;

procedure Write_Float_Array is
   type Float_Array is array(1..4) of Float;
   X : Float_Array := (1.0, 2.0, 3.0, 1.0e11);
   Y : Float_Array ;
   procedure Write_Columns(X : Float_Array; Y : Float_Array; X_Pres : Natural := 3; Y_Pres : Natural := 5) is
   begin
      for I in Float_Array'range loop
         Ada.Float_Text_Io.Put(Item => X(I), Fore => 1, Aft => X_Pres - 1);
         Ada.Text_IO.Put(" ");
         Ada.Float_Text_Io.Put(Item => Y(I), Fore => 1, Aft => Y_Pres - 1);
         Ada.Text_Io.New_Line;
      end loop;
   end Write_Columns;
begin
   for I in Float_Array'range loop
      Y(I) := Sqrt(X(I));
   end loop;
   Write_columns(X, Y);
end Write_Float_Array;

Python

Works with: Python version 2.6
import itertools
def writedat(filename, x, y, xprecision=3, yprecision=5):
    with open(filename,'w') as f:
        for a, b in itertools.izip(x, y):
            f.write("%.*g\t%.*g\n" % (xprecision, a, yprecision, b))

Example

>>> import math
>>> x = [1, 2, 3, 1e11]
>>> y = map(math.sqrt, x)
>>> y
[1.0, 1.4142135623730951, 1.7320508075688772, 316227.76601683791]
>>> writedat("sqrt.dat", x, y)
>>> # check 
...
>>> for line in open('sqrt.dat'):
...   print line,
...
1       1
2       1.4142
3       1.7321
1e+011  3.1623e+005