1 |
.\" RCSid "$Id: rcollate.1,v 1.18 2024/01/25 19:25:50 greg Exp $" |
2 |
.TH RCOLLATE 1 9/5/2013 RADIANCE |
3 |
.SH NAME |
4 |
rcollate - resize or re-order matrix data |
5 |
.SH SYNOPSIS |
6 |
.B rcollate |
7 |
[ |
8 |
.B \-h[io] |
9 |
][ |
10 |
.B \-w |
11 |
][ |
12 |
.B \-c |
13 |
][ |
14 |
.B \-f{a|f|d|b}[N] |
15 |
][ |
16 |
.B \-t |
17 |
][ |
18 |
.B "\-ic in_col" |
19 |
][ |
20 |
.B "\-ir in_row" |
21 |
][ |
22 |
.B "\-oc out_col" |
23 |
][ |
24 |
.B "\-or out_row" |
25 |
][ |
26 |
.B "\-o RxC[xR1xC2..]" |
27 |
] |
28 |
[ |
29 |
.B input.dat |
30 |
] |
31 |
.SH DESCRIPTION |
32 |
.I Rcollate |
33 |
reads in a single matrix file (table) and reshapes it to have |
34 |
the number of columns specified by the |
35 |
.I \-oc |
36 |
option. |
37 |
The number of rows may be specified with a |
38 |
.I \-or |
39 |
option, or may be determined automatically from the size of the input if |
40 |
it is an even multiple of the number of columns (as it should be). |
41 |
Alternatively, both may be specified using a |
42 |
.I \-o |
43 |
option with the number of rows and columns separated by an 'x', as in "30x14" |
44 |
for 30 rows by 14 columns. |
45 |
.I Rcollate |
46 |
can also reorder the input into nested blocks by continuing the output size |
47 |
string. |
48 |
For example, "3x10X7x2" would order output data with a 3x10 super-array of |
49 |
7x2 subblocks. |
50 |
This type of block hierarchy is convenient for visualizing tensor data. |
51 |
.PP |
52 |
By default, the file is assumed to include an information header, which |
53 |
is copied to the standard output along with the command name. |
54 |
The |
55 |
.I \-hi |
56 |
option may be used to turn off the expectation of a header on input. |
57 |
The |
58 |
.I \-ho |
59 |
option turns off header output, and |
60 |
.I \-h |
61 |
by itself turns off both input and output headers. |
62 |
The |
63 |
.I \-w |
64 |
option turns off non-fatal warning messages, such as unexpected EOD. |
65 |
.PP |
66 |
Normally, |
67 |
.I rcollate |
68 |
detects whether any transformation is actually taking place, and will |
69 |
reproduce the data verbatim if the input size and shape should be unaltered. |
70 |
The |
71 |
.I \-c |
72 |
opiton forces the operation to proceed, even if it appears to be a no-op, |
73 |
which can be useful to correct a misshapen input matrix or check that |
74 |
the data is the proper size and formatted correctly (in the case of ASCII input). |
75 |
.PP |
76 |
The input format is assumed to be ASCII, with three white-space separated words |
77 |
(typically numbers) in each record. |
78 |
A different input format may be specified with the |
79 |
.I \-f |
80 |
option. |
81 |
The suboptions are |
82 |
.I \-fa, |
83 |
.I \-ff, |
84 |
.I \-fd, |
85 |
and |
86 |
.I \-fb |
87 |
for ASCII, float, double, and binary, respectively. |
88 |
An optional count may be attached to specify the number of data elements per |
89 |
record, which defaults to 1. |
90 |
Thus, the default setting is |
91 |
.I \-fa3. |
92 |
Since |
93 |
.I rcollate |
94 |
does not interpret the fields, all binary options of the same |
95 |
length have the same result. |
96 |
On most architectures, |
97 |
.I \-ff6, |
98 |
.I \-fd3, |
99 |
and |
100 |
.I \-fb24 |
101 |
would all be equivalent. |
102 |
Note that the lack of row separators in binary files means that |
103 |
.I rcollate |
104 |
does not actually do anything for binary files unless the data is being |
105 |
re-ordered. |
106 |
.PP |
107 |
If an input header is present, it may contain the format, number of components |
108 |
and matrix dimensions. |
109 |
In such cases, the |
110 |
.I \-ic, |
111 |
.I \-ir |
112 |
and |
113 |
.I \-f |
114 |
options are not required, but will be checked against the header |
115 |
information if provided. |
116 |
An exception is made for |
117 |
.I \-fbN |
118 |
where N>1 and the |
119 |
.I \-c |
120 |
option is not present. |
121 |
In this case, the header may indicate a different format or number of |
122 |
components |
123 |
and the specified byte length is taken instead to be the exact size |
124 |
of each data record. |
125 |
.PP |
126 |
The transpose option, |
127 |
.I \-t |
128 |
swaps rows and columns on the input. |
129 |
For binary files with no header information, the user must |
130 |
specify at least one input or output dimension to define the matrix size. |
131 |
For ASCII files, |
132 |
.I rcollate |
133 |
will automatically determine the number of columns based on the |
134 |
position of the first EOL (end-of-line) character, and the number |
135 |
of rows based on the total count of records in the file. |
136 |
The user may override these determinations, allowing the matrix to |
137 |
be resized or re-ordered as well as transposed. |
138 |
If input and output dimensions are given and there is no block re-ordering, |
139 |
the number of input rows must equal the number of output columns, |
140 |
and the number of input columns must equal the number of output rows. |
141 |
If the |
142 |
.I \-o |
143 |
option is also given with multiple block levels, the transpose operation |
144 |
will logically precede the re-ordering operation, regardless of their |
145 |
position on the command line. |
146 |
.SH EXAMPLES |
147 |
To change put 8760 color triplets per row in a matrix with no header: |
148 |
.IP "" .2i |
149 |
rcollate -h \-oc 8760 input.dat > col8760.dat |
150 |
.PP |
151 |
To transpose a binary file with 145 float triplets per input row: |
152 |
.IP "" .2i |
153 |
rcollate -ff3 -ic 145 -t orig.flt > transpose.flt |
154 |
.PP |
155 |
To create an appropriate header for a binary float matrix as required by |
156 |
.I rmtxop(1)\: |
157 |
.IP "" .2i |
158 |
rcollate -hi -ff3 -or 145 -oc 8760 input.smx | rmtxop dcoef.dmx - > res.txt |
159 |
.PP |
160 |
To visualize a Shirley-Chiu BTDF matrix where the interior resolution is |
161 |
64x64 and the exterior resolution is 32x32: |
162 |
.IP "" .2i |
163 |
rcollate -o 64x64X32x32 s-c_bsdf.mtx | rmtxop -fc - > s-c_bsdf.hdr |
164 |
.SH AUTHOR |
165 |
Greg Ward |
166 |
.SH NOTES |
167 |
For large transpose or re-ordering operations on Unix systems, |
168 |
it is most efficient to specify the input file on the command line, |
169 |
rather than reading from the standard input, since |
170 |
.I rcollate |
171 |
can map the file directly into virtual memory. |
172 |
.PP |
173 |
The |
174 |
.I rcollate |
175 |
command is rather inflexible when it comes to output field and record |
176 |
separators for ASCII data. |
177 |
It accepts any amount of white space between fields |
178 |
on input, but only produces spaces as field separators |
179 |
between words and tabs as record separators on output. |
180 |
Output row separtors will always be an EOL, which may differ between systems. |
181 |
.PP |
182 |
If no options are given on the command line, or a binary file is specified |
183 |
without a transpose or re-ordering, |
184 |
.I rcollate |
185 |
issues a warning and simply copies its input to its standard output. |
186 |
.SH "SEE ALSO" |
187 |
cnt(1), histo(1), neaten(1), rcalc(1), rcomb(1), rcrop(1), rlam(1), |
188 |
rsensor(1), rmtxop(1), rsplit(1), tabfunc(1), total(1) |