[vox-tech] c code question
Matt Holland
mdholland at ucdavis.edu
Fri Mar 21 10:24:56 PDT 2008
Carl,
Here's what you do:
Write your columns as rows. Don't worry about whether some are longer
than others, just precede each element with a single space or tab
(whitespace at the beginning of the file will be ignored when you import
the file into Matlab, at the end it will be interpreted as a missing
value), and print a newline after the last element. You'll end up with
a file that may or may not have the same number of elements in each
row. If you read this into Matlab with dlmread(), it will pad the rows
out with zeros to the length of the longest row. If zeros are OK, then
transpose the array, and you've got your columns:
>> M = dlmread('/path/to/file.txt');
>> M = M';
If you want to be able to distinguish the missing values from real zeros
in the data, then use textread() in Matlab:
>> M = textread('/path/to/file.txt', '', 'emptyvalue', NaN);
>> M = M';
And you're golden. The second argument in the textread() call is an
empty string, NOT a double quotation mark.
Matt
Carl Boettiger wrote:
> Hi,
>
> This isn't a linux question directly but I'm going to abuse the
> generosity and knowledge on this list and ask anyway:
>
> I'm running a c code where I'd like to print out data to a file in a
> matrix form. I run a loop that fills in each entry of a column, which
> I print to a file fprintf(file, "%.5e\n", variable). When the loop
> starts again, I'd like to print the next set in an adjacent column,
> rather than under the existing data. (currently I import the file
> into matlab and use reshape to convert the long vector into a matrix,
> but this doesn't work if the vectors are of different lengths). Hope
> that made sense. Any ideas? Thanks!
>
> -Carl
> _______________________________________________
> vox-tech mailing list
> vox-tech at lists.lugod.org
> http://lists.lugod.org/mailman/listinfo/vox-tech
>
>
More information about the vox-tech
mailing list