做网站网站会怎么样,天津网站搭建,建立企业网站流程,网站域名如何续费前言
工程中经常将参数文件存储为bin格式, 但是实际中为了分析其参数, 也不好用C去读取调试它, 所以可以用matlab或者python去读取它, 但是还是蛮坑的
Matlab中的读取和写入
写入文件
比较坑的是, 一定要注意自己的文件存储的类型, 比如数值是float还是double之类的, 不然很…前言
工程中经常将参数文件存储为bin格式, 但是实际中为了分析其参数, 也不好用C去读取调试它, 所以可以用matlab或者python去读取它, 但是还是蛮坑的
Matlab中的读取和写入
写入文件
比较坑的是, 一定要注意自己的文件存储的类型, 比如数值是float还是double之类的, 不然很容易在读取的时候出问题.
关于数字的写入方法如下:
fileIDfopen(MatrixTest.bin,w);%w是不擦除,直接附加内容
a[1,2,3;4,5,6;7,8,9];
fwrite(fileID,a,double);%存储为double类型
fclose(fileID);
文本的写入方法同样:
fileIDfopen(TxtTest.bin,w);%w是不擦除,直接附加内容
a哈哈哈哈嗝;
fwrite(fileID,a,char);%写入格式char
fclose(fileID);
读文件
一定要与写入的数据类型相同
读取bin中存储的矩阵
fileIDfopen(MatrixTest.bin);
Afread(fileID,[17,17],double)
fclose(fileID);
%% 输出
Aans 1 4 7 2 5 8 3 6 9
可以发现matlab是列读取的, 如果我们知道矩阵的大小,那么就可以指定好
fileIDfopen(MatrixTest.bin);
Afread(fileID,[3,3],double)
fclose(fileID);
%输出
A 1 2 34 5 67 8 9
如果我们将double类型替换成float,得到的结果就是
A 0 2.2500 01.8750 0 2.00000 2.4375 0可以发现是完全错误的当然我们不指定类型, 即去掉double, 最终的结果也是错误的, 因而这个格式需要非常严格.
读取文本就需要用另一个函数native2unicode,而且不需要指定数据类型
fileIDfopen(TxtTest.bin);
Afread(fileID);
native2unicode(A)
fclose(fileID);
%输出
ans 哈哈哈哈嗝
Python中的读取和写入
主要涉及到tofile和fromfile两个函数, 同时也必须注意存储的矩阵数值的类型
写入文件
import numpy as np
import sys
anp.arange(1,10,1).reshape(3,-1)
anp.asarray(a,dtypefloat)
a.tofile(matrix_a.bin)
这样我们就在bin文件中存储了一个矩阵, 类型为float
[[ 1. 2. 3.][ 4. 5. 6.][ 7. 8. 9.]]
读取文件
读取就很简单了就一个函数只不过要提前知道数据类型
bnp.fromfile(matrix_a.bin,float)
#输出
#[ 1. 2. 3. 4. 5. 6. 7. 8. 9.]
总结
从这里可以发现, 无论是matlab还是python, 我们存储和读取的时候的数据类型一定要一致,不然读到的结果就是错误的. 还可以发现matlab是按列存储, python是按行存储的