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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

8 s  y  I& N3 k! c1. 用fprintf 函数写数据到txt,xls; g6 l* p3 u+ X6 V0 u# e
! P3 w# m3 e1 u2 _# d8 s
Example:
  ~2 s3 |1 w. z3 k& @8 e1 V: V
5 \/ w: U  c; n8 t* tx = 0:.1:1;; e: u& K! N* B$ L8 `. v- ~& V: b
y = [x; exp(x)];  R$ e  E! g  o" e5 i0 U
fid = fopen('exp.txt', 'w');
, g3 ~: Y9 n6 d/ G' B3 X7 ffprintf(fid, '%6.2f .8fn', y);
" g2 P+ `$ h. pfclose(fid)9 S; }" N' b& V+ W8 B% @
tip:执行上述代码执行,肯定不会换行的,换行的问题试一下下面的代码
1 D6 M7 u* i, V1 m
* z- j0 h; f& M2 Q& Lx = 0:.1:1;& l+ ]8 V8 H2 Y& @9 a
y = [x; exp(x)];
" g  m: D( d1 _  `2 Z# }fid = fopen('exp.txt', 'wt');
) X) \- y) o& r1 ^) q. pfprintf(fid, '%6.2f .8fn', y);6 K8 X7 h2 L  s  q3 n$ v2 z
fclose(fid);: h, b$ L% Y, i! {' o, H
5 b/ X5 ^! j: D4 u% d
这次就没有问题了,我们要注意fopne的参数wt 而不是 w,这是matlab的在线帮助的东东
& z: x: K0 z9 n1 F. g" `7 t' \6 }, r  x% r! i7 [8 E4 j& m9 }4 ]
fid = fopen(filename, permission_tmode)on Windows systems, opens the file in text. o- d! \5 k+ n
mode instead of binary mode (the default). Thepermission_tmodeargument consists: g' F# a$ t) ?9 u' Y
of any of the specifiers shown in thePermission Specifierstable above, followed
( P5 P; U* c4 _8 Jby the lettert, for example'rt'or'wt+. On UNIX®systems, text and binary mode0 {* F& ]. x5 H# C; u. j# z* I
are the same. (UNIX is a registered trademark of The
5 ~" s1 W: K- `* m4 b5 oOpen Group in the United States and other countries).
/ g6 d  o4 H& {* v( Z) a6 V' U8 b6 M& V! ]2 \
就是有两种读取模式binary or text. When choosing the binary model,No characters are5 `- j# Q5 }' U% P! u
given special treatment. 所以我们选择要注明text模式。
9 Q3 _6 c  P7 r) _# M+ z: w, Q$ D$ q" r5 \6 B
2. dlmwrite :将一个矩阵写到由分隔符分割的文件中。
9 w# z% o) c. W/ _' U9 m# @; r
: x0 X6 D& S8 r) D在保存整数到文件时使用save存为ascii文件时,常常是文件里都是实型格式的数据(有小数点,和后面很多的0,看着很不方便)。于是要保存此类数据时,我们可以使用此dlmwrite命令。
8 Q% e  A' `7 ~5 D9 H
5 N! {2 V3 G) l1 k# d4 G8 W5 \使用方法:! l+ Y" Y$ n, ?: {) u) U* l
dlmwrite('filename', M)2 u8 ]* M& d/ p  J- `/ r
使用默认分隔符“,”将矩阵M写入文本文件filename中;  X7 f8 g2 c+ v: }3 p+ @2 j1 H
dlmwrite('filename', M, 'D')
0 ^4 Z1 u7 R% }7 N6 U- H- X使用分隔符D分割数据,“t”表示tab分割,“,”为默认分割符;
  e8 M( L3 |5 g# w( [. Ldlmwrite('filename', M, 'D', R, C)
" u" y5 \  _" c2 |/ c! e* K% `从矩阵M的第R行、第C列开始,作为要写矩阵块的左上角,将数据用D分割写入文件。* Q7 x, V4 z9 ?4 S$ S+ Z, B1 n" B
其他用法有:
" {' D8 n+ W, d& l3 t& M4 Kdlmwrite('filename', M, 'attrib1', value1, 'attrib2', value2, ...)7 u9 C  H; a" \! K, P3 n
dlmwrite('filename', M, '-append')
4 }% a, S" i: Sdlmwrite('filename', M, '-append', attribute-value list)
/ `! Q" Y* \9 F4 v: ?: ~9 F; k% ]1 |+ `3 ~4 d: U
例如:
1 k- F& K9 w+ C/ N0 T3 C4 k: A( u: pa = [1 2 3; 4 5 6; 7 8 9];
4 n+ F  w( n/ S* Adlmwrite('test.txt', a);
" V* z: Z1 B' c: E: j: t, [# L* _, r; l9 t7 @6 b9 @
则test.txt中的内容为:
# T+ P& f4 X) E/ Y1 D! `/ b1,2,30 F( ?1 Z" {( l1 X% m% G3 ?
4,5,6' t6 i* ~* a, p1 n/ l5 c
7,8,95 @$ J2 r9 b$ I! a& Y3 z

) B! I1 V) x! }1 l- m: x而使用save
9 C6 u) h+ ]( o' U( xa = [1 2 3; 4 5 6; 7 8 9];
4 w2 G$ F1 _6 P" \save 'tst.txt' a -ascii;文本文件里的内容为:( y& b8 T) O& @' R
   1.0000000e+000   2.0000000e+000   3.0000000e+000
/ O" h. p. j$ L& S7 l; ]1 i3 k- C   4.0000000e+000   5.0000000e+000   6.0000000e+000
7 C" _+ i) x7 h1 }, J   7.0000000e+000   8.0000000e+000   9.0000000e+000
/ b8 r" J+ ]! F+ N& {) [! E# Q( v' m- t
) h& Q' I, n5 j9 z' V
3.xlswrite 写入excel
! Y" {+ o, Q* ]3 U3 O4 n( w, R( X8 N( k! n% q  E+ n8 R( x9 {5 J
4.fprintf和dlmwrite区别
- q- G/ q/ o4 S9 q
/ m/ ^) C. w) I4 G, c7 uMATLAB在图像处理中的应用,实际是对图像矩阵的操做运算,MATLAB在图像处理中的常用的命令有:
$ `6 `/ Q5 L# k$ o7 timread(): 从图像文件夹中读取图像的函数;
( \& Y) x' q# |3 X! i) `imwrite(): 输出图像的函数;
4 e' R! F' A( Y, S1 nimshow(), image(): 图像显示于屏幕的函数;
! U- t, n( n7 H0 T1 F7 Q2 dimcrop(): 对图像进行裁剪的函数;;
9 W  L3 y* w4 h' x$ f/ i: wimresize(): 实现对图像的插值缩放的函数;, G' A) B8 u3 F0 F& `7 D4 o
imrotate(): 用实现对图像的旋转。, t' {- o; v( q, ^6 v5 N7 Y  ~9 h; O
im2double(),double(): 将图像数组转化为double类型;
3 a, [  h/ c$ Q6 `' ]" S( P$ Vim2uint8(),uint8(): 将图像数组转化为uint8类型;4 x2 h. U$ s9 y( o- A2 n) k9 _
im2uint16(),uint16(): 将图像数组转化为uint16类型;7 r( R0 u; e, P& W0 j; V% e( U
关于上述的命令使用方法可以参考一些MATLAB方面的书籍或者用MATLAB自带的帮助(help or doc)命令.8 }3 H& C: e4 m0 q
如 我想知道dwt2()命令的使用方法 可以执行下面的命令( q3 I) [+ V# s5 S/ `8 i1 Q' R
>> help dwt2 或 >>doc dwt2
- \* W8 |* I; ^' q/ N* v# Q" y系统就会告诉你它的使用要求和方法,如果系统说找不到对应的帮助文件,那就可能是你装的MATLAB里面没有这个命令,那很可能这个命令就不能使用.
; `) A9 g. K9 B" b3 P; ]% j在图像数组的输出到文件的操作上,我发现fprintf比dlmwrite明显快很多,但这两个输出的数据格式有些差别,见下面操作:
) u# m# s" ?5 j) I6 S$ F* L9 r>> a=[1 2 3;4 5 6;7 8 9]: i% T! n4 I/ @9 I
a =
! q( ^3 u, m0 D* N$ S! ~     1     2     3- ]$ D! q* ~/ J$ w3 k4 |
     4     5     6' d: `/ T0 E/ w
     7     8     9
6 M! f% D8 U! h0 ], {>>fid = fopen('exp.txt','w');( l7 O8 O% d5 u$ o9 P) Q- Y
fprintf(fid,'%2.0fn',a);0 l6 g! O, T8 Q" r
fclose(fid);
, o% x# I8 w) E# i& @* {6 R9 \! o
>> type exp.txt
5 R. j% M& `* p& |( y" L
5 x5 a, x9 t* T( C. i: c2 l, e8 d1
# p# J# i- x8 J- U9 ?5 w4
. O; J! i# U8 `' x9 u4 R7* b0 k5 q4 q5 e6 D5 v9 u, j
26 B, k9 E) Q9 L5 Q
5
4 }  B/ t( w& n7 a, L8 c8
& a/ u4 I' ~* U  n/ p  r  s" u3
, @2 I. ~. W+ T. B  Y, p4 j9 M6
1 j. v' j" X+ I* n9
3 y' c4 L( T/ g% H- Z; ~fprintf输出是一列一列的从左到右输出。2 q! p2 X7 d% y  w
>> dlmwrite('eg2.dat',a,'n');
3 f" A& c8 g3 Q>> type eg2.dat
* T& w) f* K) U7 D% o. m1
- `2 ~3 ^% k* F( S2; p2 V1 ^" b$ L/ Z- P( n8 H* o
3. Y8 r  _- v: e$ b$ U# B9 j
4
+ n3 G0 B: r/ L. n2 \5
6 T3 i' K3 b! f5 h6; I* B1 Y8 i1 z* e5 X9 f+ h1 r* b
7
; ?( X8 d) {3 U; }& [  C7 {8 C8
" F; J! o3 Z) o6 ~% ?8 C91 y4 Q+ O  J6 c' g' ?9 V( ~
dlmwrite输出是一行一行的从上到下输出。
; k, o: R, h9 G: Q. C  |下面是一个比较简单的图像处理程序:1 O/ _' k9 E) V9 j  J2 ?0 ~
clear;%清除当前工作区所有变量; i: @5 i$ \. u0 ?& E, d
data=imread('E:2D前处理eg1.bmp');%从图像文件夹中读取图像eg1.bmp+ L" w' \" B9 g& `9 h( g3 v
data=double(data);%将图像数组data转化为double类型* I% D* o6 W  G! w7 K
[x,y]=size(data);%求数组大小,x是data数组有多少行,y是data数组有多少列
, P' S( l6 ]% x: cdata1=imresize(data,[x,y*2/1.732]);%实现对图像的左右插值放大2/1.732倍2 z9 I( v2 }' }4 t$ [
[x,y]=size(data1);%%求放大后图像数组大小
2 k8 A0 w' r; z+ q+ }fid = fopen('E:2D前处理Particletest.dat', 'wt');%打开图像数组的将要输出到文件3 C' J. V9 [* _
fprintf(fid, '%2.0ft%2.0fn', x, y);%输出x,y值
6 |; a( q% T) A, F- j+ {# }fprintf(fid, '%2.0fn', data1);%输出图像数组数据
  Y- i+ G( |% c' V" ofclose(fid);%关闭文件指针: E8 v% @! K/ n- e  N1 k5 a: n
7 n- z1 Q4 p- T
! }7 a- _6 a+ D/ [' p2 e4 W5 l

该用户从未签到

2#
发表于 2020-4-2 18:27 | 只看该作者
导出的很详细,函数表述很详细,值得学习
  `: a8 w, a8 f: Q  A) G. G[x,y]=size(data1);%%求放大后图像数组大小
4 e1 j8 x, h4 d  b. D" Z3 ~0 y
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-4 06:02 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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