Changeset 21708
- Timestamp:
- 05/05/17 23:50:08 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/solve/WriteData.py
r21646 r21708 234 234 for j in xrange(s[1]): 235 235 fid.write(struct.pack('d',float(data[i][j]))) #get to the "c" convention, hence the transpose 236 # }}} 237 238 elif m.strcmpi(format,'CompressedMat'): # {{{ 239 240 if isinstance(data,(bool,int,long,float)): 241 data=np.array([data]) 242 elif isinstance(data,(list,tuple)): 243 data=np.array(data).reshape(-1,) 244 if np.ndim(data) == 1: 245 if np.size(data): 246 data=data.reshape(np.size(data),) 247 else: 248 data=data.reshape(0,0) 249 250 #Get size 251 s=data.shape 252 if np.ndim(data) == 1: 253 n2=1 254 else: 255 n2=s[1] 256 257 #if matrix = NaN, then do not write anything 258 if np.ndim(data)==1 and np.product(s)==1 and np.all(np.isnan(data)): 259 s=(0,0) 260 n2=0 261 262 #first write length of record 263 recordlength=4+4+8+8+1*(s[0]-1)*n2+8*n2+4+4 #2 integers (32 bits) + the matrix + code + matrix type 264 if recordlength > 4**31 : 265 raise ValueError('field %s cannot be marshalled because it is larger than 4^31 bytes!' % enum) 266 267 fid.write(struct.pack('i',recordlength)) #2 integers (32 bits) + the matrix + code + matrix type 268 269 #write data code and matrix type: 270 fid.write(struct.pack('i',FormatToCode(format))) 271 fid.write(struct.pack('i',mattype)) 272 273 #Write offset and range 274 A = data[0:s[0]-1] 275 offsetA = A.min() 276 rangeA = A.max() - offsetA 277 278 if rangeA == 0: 279 A = A*0 280 else: 281 A = (A-offsetA)/rangeA*255. 282 283 #now write matrix 284 if np.ndim(data) == 1: 285 fid.write(struct.pack('i',s[0])) 286 fid.write(struct.pack('i',1)) 287 fid.write(struct.pack('d',float(offsetA))) 288 fid.write(struct.pack('d',float(rangeA))) 289 for i in xrange(s[0]-1): 290 fid.write(struct.pack('B',int(A[i]))) 291 292 fid.write(struct.pack('d',float(data[s[0]-1]))) #get to the "c" convention, hence the transpose 293 294 elif np.product(s) > 0: 295 fid.write(struct.pack('i',s[0])) 296 fid.write(struct.pack('i',s[1])) 297 fid.write(struct.pack('d',float(offsetA))) 298 fid.write(struct.pack('d',float(rangeA))) 299 for i in xrange(s[0]-1): 300 for j in xrange(s[1]): 301 fid.write(struct.pack('B',int(A[i][j]))) #get to the "c" convention, hence the transpose 302 303 for j in xrange(s[1]): 304 fid.write(struct.pack('d',float(data[s[0]-1][j]))) 305 236 306 # }}} 237 307 … … 337 407 elif m.strcmpi(format,'StringArray'): 338 408 code=9 409 elif m.strcmpi(format,'CompressedMat'): 410 code=10 339 411 else: 340 412 raise InputError('FormatToCode error message: data type not supported yet!')
Note:
See TracChangeset
for help on using the changeset viewer.