用 Python 写 binp 文件,用 Matlab 读
Writing binp file with Python, Reading with Matlab
我正在用 Pyton 编写一个 .binp 文件,并试图再次在 Matlab 中读取它。
.binp 文件有一个 X-Header 有 11 个参数,Y-Header 有 7 个参数
#Data
X[0,0] = 0
X[0,1] = -delta_width/2
X[0,2] = -delta_height/2
X[0,3] = 0.0
X[0,4] = delta_width/2
X[0,5] = 0.0
X[0,6] = 0.0
X[0,7] = 0.0
X[0,8] = delta_height/2
X[0,9] = 0.0
X[0,10] = n_nvector_facet
Y = np.zeros((n_facet*n_nvector_facet,7)) # only one normal vector per facet
Y[0,0] = -delta_width/2
Y[0,1] = -delta_height/2
Y[0,2] = 0.0
Y[0,3] = 0.0
Y[0,4] = 0.0
Y[0,5] = 1.0
Y[0,6] = delta_width*delta_height
#Writing to .binp
np.uint32(X[0,0]).tofile(f)
np.float32(X[0,1:9]).tofile(f)
np.uint32(X[0,10]).tofile(f)
np.float32(Y[0,0:6]).tofile(f)
Matlab 代码 - 读取文件
fid = fopen(filepath);
X1(1,1) = fread(fid, 1, 'int32');
X2(1,1:9) = fread(fid, 9, 'float32');
X3(1,1) = fread(fid, 1, 'uint32');
n = nfacetrays(1,1)*6;
Y{1} = fread(fid, n, 'float32');
读取的文件中缺少一个值
- 书面X-Header:0 -2.5 -1.5 0 2.5 0 0 0 1.5 0 1
- 书面Y-Header:-2.5 -1.5 0 0 0 1 15
- 读 X-Header: 0 -2.5000000 -1.5000000 0 2.5000000 0 0 1.5000000 1.4012985e-45 3223322624
- 读 Y-Header: -1.50000000000000 0 0 0 1 0 2.50000000000000
所以基本上 X-header 0 和 1 Y-header -2.5 中的 0 和 1 or/and 读取不正确或其中一个丢失,因为在读取 Y-Header 中它以 -1.5 而不是 -2.5 开头。
有什么想法吗?这个错误是从哪里来的?
改变
np.float32(X[0,1:9]).tofile(f)
至
np.float32(X[0,1:10]).tofile(f)
上限:
不包含
我正在用 Pyton 编写一个 .binp 文件,并试图再次在 Matlab 中读取它。
.binp 文件有一个 X-Header 有 11 个参数,Y-Header 有 7 个参数
#Data
X[0,0] = 0
X[0,1] = -delta_width/2
X[0,2] = -delta_height/2
X[0,3] = 0.0
X[0,4] = delta_width/2
X[0,5] = 0.0
X[0,6] = 0.0
X[0,7] = 0.0
X[0,8] = delta_height/2
X[0,9] = 0.0
X[0,10] = n_nvector_facet
Y = np.zeros((n_facet*n_nvector_facet,7)) # only one normal vector per facet
Y[0,0] = -delta_width/2
Y[0,1] = -delta_height/2
Y[0,2] = 0.0
Y[0,3] = 0.0
Y[0,4] = 0.0
Y[0,5] = 1.0
Y[0,6] = delta_width*delta_height
#Writing to .binp
np.uint32(X[0,0]).tofile(f)
np.float32(X[0,1:9]).tofile(f)
np.uint32(X[0,10]).tofile(f)
np.float32(Y[0,0:6]).tofile(f)
Matlab 代码 - 读取文件
fid = fopen(filepath);
X1(1,1) = fread(fid, 1, 'int32');
X2(1,1:9) = fread(fid, 9, 'float32');
X3(1,1) = fread(fid, 1, 'uint32');
n = nfacetrays(1,1)*6;
Y{1} = fread(fid, n, 'float32');
读取的文件中缺少一个值
- 书面X-Header:0 -2.5 -1.5 0 2.5 0 0 0 1.5 0 1
- 书面Y-Header:-2.5 -1.5 0 0 0 1 15
- 读 X-Header: 0 -2.5000000 -1.5000000 0 2.5000000 0 0 1.5000000 1.4012985e-45 3223322624
- 读 Y-Header: -1.50000000000000 0 0 0 1 0 2.50000000000000
所以基本上 X-header 0 和 1 Y-header -2.5 中的 0 和 1 or/and 读取不正确或其中一个丢失,因为在读取 Y-Header 中它以 -1.5 而不是 -2.5 开头。
有什么想法吗?这个错误是从哪里来的?
改变
np.float32(X[0,1:9]).tofile(f)
至
np.float32(X[0,1:10]).tofile(f)
上限:
不包含