找回密码
 注册
关于网站域名变更的通知
查看: 396|回复: 1
打印 上一主题 下一主题

从Matlab导出数据(fprintf,dlmwrite,xlswrite)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-4-2 10:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

3 p. N3 m' d& U3 c8 T" S7 D7 ?1. 用fprintf 函数写数据到txt,xls
4 D* w! n( H, p3 B* `/ [- K# ^  b% N  l; ]% ^* U
Example:: ]" Y) |2 Q0 {& E! E) @7 [
+ E; ]+ n& o3 y$ U: j8 }
x = 0:.1:1;* H$ ^: ]% L& z, B; S
y = [x; exp(x)];5 ?1 {3 i! Y4 B
fid = fopen('exp.txt', 'w');
+ {) n: [% n1 K! W$ c6 Sfprintf(fid, '%6.2f .8fn', y);
& N. [1 V- g8 J. _fclose(fid)$ M4 L( O0 o- q" S
tip:执行上述代码执行,肯定不会换行的,换行的问题试一下下面的代码# y4 t) \. H. s7 u8 W1 F$ w4 l

  ]  c: r6 ?1 Wx = 0:.1:1;& n& K, ], m4 [7 S$ {" A# n
y = [x; exp(x)];
& Y, f* C2 M" D4 X( Y1 E$ ffid = fopen('exp.txt', 'wt');
5 Z* i$ A8 I2 d& Tfprintf(fid, '%6.2f .8fn', y);7 G) z) t' D! I7 t$ C0 b' P: u2 x
fclose(fid);
$ u' C: t6 Q) D: f& e! p. r! ]; u2 P( ?+ p) p  ~
这次就没有问题了,我们要注意fopne的参数wt 而不是 w,这是matlab的在线帮助的东东4 L  {% y8 h1 d8 r! d3 A

, y* Q, s* `' E% f0 afid = fopen(filename, permission_tmode)on Windows systems, opens the file in text
: [) N, }, P1 U4 g' z/ Fmode instead of binary mode (the default). Thepermission_tmodeargument consists2 Q5 D6 n, q. p/ o, S4 i, q3 Q
of any of the specifiers shown in thePermission Specifierstable above, followed
* z* }4 d$ L# I  Sby the lettert, for example'rt'or'wt+. On UNIX®systems, text and binary mode% M; q" t) Z" E4 }- h- T$ E
are the same. (UNIX is a registered trademark of The/ N5 ~3 m( s% Z/ t7 S3 {
Open Group in the United States and other countries).
* q9 \4 u, }$ U& ~9 \$ _8 }
! b) m3 X' k$ n就是有两种读取模式binary or text. When choosing the binary model,No characters are& Y, a) ]- }6 `
given special treatment. 所以我们选择要注明text模式。& J# E0 O; D8 Y2 L" s; O6 e$ G

% n+ N6 J+ ~, P0 F4 ]  A2. dlmwrite :将一个矩阵写到由分隔符分割的文件中。) v+ k8 z! t' z
" r, b! }& i1 E" ~' c8 \
在保存整数到文件时使用save存为ascii文件时,常常是文件里都是实型格式的数据(有小数点,和后面很多的0,看着很不方便)。于是要保存此类数据时,我们可以使用此dlmwrite命令。
+ A% N5 O6 s8 f; W$ l6 d% e! O  C' J! z- k; M
使用方法:
$ d- ]* j4 Q: @6 x& f* }dlmwrite('filename', M)* }! z" H3 \% I3 N  _* F' O
使用默认分隔符“,”将矩阵M写入文本文件filename中;0 g' z& D/ I7 E, M9 y$ X
dlmwrite('filename', M, 'D')
8 G* l9 L* y* M- Q+ L0 K) k使用分隔符D分割数据,“t”表示tab分割,“,”为默认分割符;
) r. y9 V1 B  O/ z! Pdlmwrite('filename', M, 'D', R, C)8 P3 V9 X9 E/ z9 z6 E: r1 w
从矩阵M的第R行、第C列开始,作为要写矩阵块的左上角,将数据用D分割写入文件。
' F/ J8 P% }# h$ }/ I2 @' [其他用法有:0 v8 [& f- Z/ d
dlmwrite('filename', M, 'attrib1', value1, 'attrib2', value2, ...)
" O6 o+ D  \1 rdlmwrite('filename', M, '-append')& e3 B) d- u# H1 T* I
dlmwrite('filename', M, '-append', attribute-value list)) q9 E" G" \8 Z9 N! [% ^; K
' l, w! H6 E% a$ w$ G( p
例如:; b9 @8 x: {  i/ _, ]
a = [1 2 3; 4 5 6; 7 8 9];$ q0 d. W+ ^2 R& N' V" {
dlmwrite('test.txt', a);
& D7 p/ J) V) `+ e1 T! B9 n7 `# K2 a' }4 t2 W5 m  V* ^
则test.txt中的内容为:0 n$ ~! |/ g, ?0 N+ o
1,2,3
2 b: J( d, X4 k4,5,6; i+ j2 ^4 I6 g: n2 I
7,8,92 [& o' I1 O( R1 n4 ^
+ K$ U3 S  ~2 C) u
而使用save
$ B) g# H, p0 E+ a1 o* V( ia = [1 2 3; 4 5 6; 7 8 9];6 K2 K' C: Y4 ?0 \4 W+ b
save 'tst.txt' a -ascii;文本文件里的内容为:- h% l% \1 Z+ O6 g. F# U
   1.0000000e+000   2.0000000e+000   3.0000000e+000
% d% I  d0 N4 O: K+ u) R/ l, E! i   4.0000000e+000   5.0000000e+000   6.0000000e+000
  J0 f) K: q" o# i   7.0000000e+000   8.0000000e+000   9.0000000e+000! d3 f. f- C& i6 l

2 |1 f  {; ]8 e0 H- ^0 k
0 d) o7 ^' E$ o- @: g2 @3.xlswrite 写入excel$ |5 c: X/ m7 ^  B9 J# F" Y

0 W' C1 B7 o6 @6 a# b+ a: n) S4.fprintf和dlmwrite区别  g. n2 V( f5 X0 c/ p3 d& I

! [$ s0 \1 y0 ]& o! d  B( MMATLAB在图像处理中的应用,实际是对图像矩阵的操做运算,MATLAB在图像处理中的常用的命令有:4 q0 ]& ?1 _0 z0 @6 E$ V
imread(): 从图像文件夹中读取图像的函数;0 c( F, C+ O1 f  D8 p, S
imwrite(): 输出图像的函数;) X+ z% \' l1 u& X
imshow(), image(): 图像显示于屏幕的函数;
$ }, p6 j) W, G' Kimcrop(): 对图像进行裁剪的函数;;
0 x; _& M! L6 Eimresize(): 实现对图像的插值缩放的函数;" k0 ?- h0 S" J% a
imrotate(): 用实现对图像的旋转。  V3 I# I8 N( e
im2double(),double(): 将图像数组转化为double类型;
0 W+ p2 E. C& t, Uim2uint8(),uint8(): 将图像数组转化为uint8类型;
8 D1 w! }; v& z1 q" V4 P2 {. c/ wim2uint16(),uint16(): 将图像数组转化为uint16类型;' H0 P* Z' Q# R% `$ R
关于上述的命令使用方法可以参考一些MATLAB方面的书籍或者用MATLAB自带的帮助(help or doc)命令.
6 p& I% w/ P+ _; F( ?如 我想知道dwt2()命令的使用方法 可以执行下面的命令: n5 [, u& i2 b8 z  k( q* l0 G* b- J
>> help dwt2 或 >>doc dwt2
5 Q4 i; L3 H( G6 F) q# ]- d, _系统就会告诉你它的使用要求和方法,如果系统说找不到对应的帮助文件,那就可能是你装的MATLAB里面没有这个命令,那很可能这个命令就不能使用.) V' K3 F1 r' x0 C, |/ q  u! }
在图像数组的输出到文件的操作上,我发现fprintf比dlmwrite明显快很多,但这两个输出的数据格式有些差别,见下面操作:
" k$ C. ?- p* g  l8 j5 H/ [>> a=[1 2 3;4 5 6;7 8 9]
  O. q& o1 @) ]8 e  f* \/ A9 x+ S) Ra =* f- b) n1 Y# o! {
     1     2     3
9 s7 G- Q4 @- r! c& y, V     4     5     6; [- V8 C# a  `  b
     7     8     9% H+ K( z! U" g6 r% f1 N( [0 k
>>fid = fopen('exp.txt','w');5 N6 W" f  Z% b$ h, c
fprintf(fid,'%2.0fn',a);
  {) N4 R' |7 W$ m- ~4 B) Bfclose(fid);& g7 b" f8 a) Q# k- G( I
; }2 w+ x# ]+ N* Z
>> type exp.txt
* [* \/ M9 Y; [2 G: L, t% x: b5 e
1* S- g- M/ s, w7 }0 \/ G, t
4  i8 j* w3 H  O$ d0 @
7" _- j4 {1 l# h  q( n: e
2
/ C" w, n" u0 [0 r5
  |% I! e' _9 h* P, S" ?8  |* u  R7 w( y% D
3! r  r- r7 l& v) h
6
' m  A: r" u9 L* R' ]6 A. z9
' S4 v! @8 w  w# L% |fprintf输出是一列一列的从左到右输出。
/ p  [4 i' @" Y5 c6 X0 k>> dlmwrite('eg2.dat',a,'n');
. c4 `+ M/ v0 R>> type eg2.dat4 v9 h* X9 N6 g& Z: s4 r- z
1
+ n( c0 {' \2 S6 B* L2" W5 z% v' ^* S) v- p  t% i) q! C2 Z
3
# O  I/ ]! |$ g( I. U. B9 f1 J4
8 S) [* z; q' e' r1 X1 T58 G& I8 }% o* g, `5 ~- F
6
: `9 L: B# C* `- V; l71 D6 _2 L+ T4 C* W8 Q1 b
83 C6 l1 z! Y( z; K/ k5 I- y
9
/ P7 A* J6 f; r% G7 ?& ~5 E7 fdlmwrite输出是一行一行的从上到下输出。
  E# X, r9 T: Q" p下面是一个比较简单的图像处理程序:
: }4 l& a5 m& O' M1 Sclear;%清除当前工作区所有变量/ S& \" J2 k& Q. x
data=imread('E:2D前处理eg1.bmp');%从图像文件夹中读取图像eg1.bmp( q$ a+ j* X; L, ?3 T1 ^9 s+ ?
data=double(data);%将图像数组data转化为double类型9 `9 s9 P: `. }3 ]9 {% t
[x,y]=size(data);%求数组大小,x是data数组有多少行,y是data数组有多少列
9 _( e2 R, E( ]4 o0 R6 vdata1=imresize(data,[x,y*2/1.732]);%实现对图像的左右插值放大2/1.732倍
  ?/ ]0 c0 C( a+ j7 b[x,y]=size(data1);%%求放大后图像数组大小
7 H/ B& B2 d1 f, E4 |  Ffid = fopen('E:2D前处理Particletest.dat', 'wt');%打开图像数组的将要输出到文件
  H  u3 C/ D; N4 J( I- h% s+ Ifprintf(fid, '%2.0ft%2.0fn', x, y);%输出x,y值% e( z  H' ?# M, ], N0 x$ c
fprintf(fid, '%2.0fn', data1);%输出图像数组数据, K, _5 x3 Y# U1 R8 l( u" s- U/ B
fclose(fid);%关闭文件指针
: M$ @1 J2 B% v$ }% G4 u
3 B& _7 ~/ @- p+ x# {
; v6 R$ x2 I9 d

该用户从未签到

2#
发表于 2020-4-2 18:27 | 只看该作者
导出的很详细,函数表述很详细,值得学习3 W1 o# M& ]7 e* ]* g6 g3 p
[x,y]=size(data1);%%求放大后图像数组大小
' ^" _$ N7 d6 ]0 _, G
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-22 03:14 , Processed in 0.078125 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表