Next: Array storage, Previous: Array globals, Up: Arrays [Contents][Index]
The current version of Blitz++ includes rudimentary output formatting for arrays. Here’s an example:
#include <blitz/array.h>
using namespace blitz;
int main()
{
Array<int,2> A(4,5,FortranArray<2>());
firstIndex i;
secondIndex j;
A = 10*i + j;
cout << "A = " << A << endl;
Array<float,1> B(20);
B = exp(-i/100.);
cout << "B = " << endl << B << endl;
return 0;
}
And the output:
A = (1,4) x (1,5) [ 11 12 13 14 15 21 22 23 24 25 31 32 33 34 35 41 42 43 44 45 ] B = (0,19) [ 1 0.99005 0.980199 0.970446 0.960789 0.951229 0.941765 0.932394 0.923116 0.913931 0.904837 0.895834 0.88692 0.878095 0.869358 0.860708 0.852144 0.843665 0.83527 0.826959 ]
Arrays may be restored from an istream using the >> operator.
Caution: you must know the dimensionality of the array being restored
from the stream. The >> operator expects an array in the same input
format as generated by the << operator, namely:
'[' indicating the start of the array data
']' indicating the end of the array data
The operator prototype is:
template<class T, int N> istream& operator>>(istream&, Array<T,N>&);
Here is an example of saving and restoring arrays from files. You can find this example in the Blitz++ distribution as examples/io.cpp.
#include <blitz/array.h>
#ifdef BZ_HAVE_STD
#include <fstream>
#else
#include <fstream.h>
#endif
BZ_USING_NAMESPACE(blitz)
const char* filename = "io.data";
void write_arrays()
{
ofstream ofs(filename);
if (ofs.bad())
{
cerr << "Unable to write to file: " << filename << endl;
exit(1);
}
Array<float,3> A(3,4,5);
A = 111 + tensor::i + 10 * tensor::j + 100 * tensor::k;
ofs << A << endl;
Array<float,2> B(3,4);
B = 11 + tensor::i + 10 * tensor::j;
ofs << B << endl;
Array<float,1> C(4);
C = 1 + tensor::i;
ofs << C << endl;
}
int main()
{
write_arrays();
ifstream ifs(filename);
if (ifs.bad())
{
cerr << "Unable to open file: " << filename << endl;
exit(1);
}
Array<float,3> A;
Array<float,2> B;
Array<float,1> C;
ifs >> A >> B >> C;
cout << "Arrays restored from file: " << A << B << C << endl;
return 0;
}
Caution: The storage order and starting indices are not restored from the input stream. If you are restoring (for example) a Fortran-style array, you must create a Fortran-style array, and then restore it. For example, this code restores a Fortran-style array from the standard input stream:
Array<float,2> B(fortranArray); cin >> B;
Next: Array storage, Previous: Array globals, Up: Arrays [Contents][Index]