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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
6 X% ^7 I  i1 B& i$ _- s
1. 用fprintf 函数写数据到txt,xls
/ V; S7 k# q- x, g+ q1 x- e3 R2 Y% h0 D- U4 Z
Example:
0 o% q, W& k/ K8 t0 _
  `( S. B* @( Vx = 0:.1:1;
2 L3 p1 i4 d# c$ ^& \/ T2 X5 uy = [x; exp(x)];
/ v9 p9 j6 }6 mfid = fopen('exp.txt', 'w');" z% {7 F% |4 @; s: ]5 s7 ~9 K
fprintf(fid, '%6.2f .8fn', y);6 i4 `% d% S  l  v
fclose(fid)/ W4 F3 A! q8 X4 }- F1 S$ [. k; D
tip:执行上述代码执行,肯定不会换行的,换行的问题试一下下面的代码
( ]* ^6 \0 [6 M3 c1 M% _' b) q6 j$ o5 b/ ?+ V4 F
x = 0:.1:1;
% z  T; p3 h! _* S' w: g3 z1 My = [x; exp(x)];7 o, g. K, k  z9 w% n% @
fid = fopen('exp.txt', 'wt');& Q" s: Z+ b1 t
fprintf(fid, '%6.2f .8fn', y);
; K, `+ g& i" kfclose(fid);: j: X& R  q% B, h
3 [4 J" g; S6 P$ o, w5 L
这次就没有问题了,我们要注意fopne的参数wt 而不是 w,这是matlab的在线帮助的东东9 K* c, J. u( C7 C! y& k2 z; }/ P

* k* M- T3 [6 X: Wfid = fopen(filename, permission_tmode)on Windows systems, opens the file in text$ h9 {+ B$ G; j5 D" @7 U
mode instead of binary mode (the default). Thepermission_tmodeargument consists# ^  x2 [8 v: ~; v. @5 Q; E
of any of the specifiers shown in thePermission Specifierstable above, followed3 `7 ^2 Q8 p$ X" D% S
by the lettert, for example'rt'or'wt+. On UNIX®systems, text and binary mode
7 G. [( C3 g1 f& k: P; Kare the same. (UNIX is a registered trademark of The
' y% w0 [9 O) E  r( w1 }9 uOpen Group in the United States and other countries).
* {, y  L4 R" y) @% B  W/ f* f3 ]; U9 k  \
就是有两种读取模式binary or text. When choosing the binary model,No characters are
; D/ l9 R0 E8 q3 m( Kgiven special treatment. 所以我们选择要注明text模式。
: x2 T' w! O4 x. n# O4 }. h! M. a0 _. w" Y0 u7 Q
2. dlmwrite :将一个矩阵写到由分隔符分割的文件中。( j0 p: R3 Q, o5 R) O: ?

! z2 R! H% U- V  F在保存整数到文件时使用save存为ascii文件时,常常是文件里都是实型格式的数据(有小数点,和后面很多的0,看着很不方便)。于是要保存此类数据时,我们可以使用此dlmwrite命令。
, V4 l( u" p' Q* Q' l+ V8 s! {: U# G4 H
使用方法:
& K7 u3 E7 Z$ |6 d5 J- R+ ddlmwrite('filename', M)0 l, i* `* E4 O3 B: {
使用默认分隔符“,”将矩阵M写入文本文件filename中;
# C* Q, l1 G/ s, o& H1 B* N3 I: n, Edlmwrite('filename', M, 'D')
& ^+ v9 _  l0 C/ U2 K; r0 J5 l5 V使用分隔符D分割数据,“t”表示tab分割,“,”为默认分割符;
5 _/ X$ Y0 D/ {- G. rdlmwrite('filename', M, 'D', R, C)
* r6 K7 x, X, |3 {从矩阵M的第R行、第C列开始,作为要写矩阵块的左上角,将数据用D分割写入文件。! B. p( J$ E; ~
其他用法有:9 w4 H# H* {9 l& h% q  {
dlmwrite('filename', M, 'attrib1', value1, 'attrib2', value2, ...)
; ^! F1 n: e' {4 Q% S* E" tdlmwrite('filename', M, '-append')
, \- T! [# g- F0 K0 {, _dlmwrite('filename', M, '-append', attribute-value list)
) I7 D: }4 J- R3 B3 r3 ?5 b, E8 n' b% |' d; ^5 _$ t: Y1 Z1 x
例如:  L! G- R$ a4 _5 b
a = [1 2 3; 4 5 6; 7 8 9];1 N  q0 R# i0 f% _. d, ^# }
dlmwrite('test.txt', a);, u. D& H  |( M1 v8 Q
3 q* L* O- G& {1 U
则test.txt中的内容为:
% D9 E: u! z, ]. N+ \1 D1,2,34 {1 w9 \7 r# }# n+ G
4,5,64 v  }4 O! J* _# I" H# ^9 H
7,8,9: `" D; q( z' H) ?8 n

0 G# C7 E. ?; }7 D$ {而使用save9 S  V2 `. m! m9 u) j" v2 ^3 d5 a
a = [1 2 3; 4 5 6; 7 8 9];4 [7 v& y9 z* K  l
save 'tst.txt' a -ascii;文本文件里的内容为:7 {6 G4 u" |* V
   1.0000000e+000   2.0000000e+000   3.0000000e+000  D. c. C7 [% ^6 i
   4.0000000e+000   5.0000000e+000   6.0000000e+000% r$ l" C* y+ L' [3 p+ g
   7.0000000e+000   8.0000000e+000   9.0000000e+000
) n, k0 s. u9 u% ~! |+ o/ k0 I% Y$ @) ^# S

. g8 C" _9 L1 j- C- y" Y3.xlswrite 写入excel" f1 P8 @2 q, t

1 b9 W0 C1 p* P6 g4.fprintf和dlmwrite区别4 j! \5 x6 J+ d/ O2 D6 ^

' z. D0 r2 L4 G/ |MATLAB在图像处理中的应用,实际是对图像矩阵的操做运算,MATLAB在图像处理中的常用的命令有:4 |5 B: e* m" Z% G- T
imread(): 从图像文件夹中读取图像的函数;5 J; D/ T1 p* }3 Q# c. f
imwrite(): 输出图像的函数;% ^- v9 r" p0 {* d# w) g
imshow(), image(): 图像显示于屏幕的函数;
8 d& N5 W; m1 T) c7 Cimcrop(): 对图像进行裁剪的函数;;
* j2 D& ?" [/ @! O& }imresize(): 实现对图像的插值缩放的函数;6 \: k. f+ W- U5 W: z
imrotate(): 用实现对图像的旋转。
3 R) |/ G9 K/ b4 ^3 U; t; Jim2double(),double(): 将图像数组转化为double类型;0 X$ q% n# r* V0 `
im2uint8(),uint8(): 将图像数组转化为uint8类型;5 l4 J' ~4 w) L+ c8 H
im2uint16(),uint16(): 将图像数组转化为uint16类型;
& _1 F* k0 N+ o6 p9 `关于上述的命令使用方法可以参考一些MATLAB方面的书籍或者用MATLAB自带的帮助(help or doc)命令.
) S2 Z5 s7 x2 }9 b如 我想知道dwt2()命令的使用方法 可以执行下面的命令0 t+ u. b3 D6 m/ r6 O; V3 w
>> help dwt2 或 >>doc dwt2
+ U, W2 J7 `7 P, i+ \系统就会告诉你它的使用要求和方法,如果系统说找不到对应的帮助文件,那就可能是你装的MATLAB里面没有这个命令,那很可能这个命令就不能使用.8 c' H- x/ }: B2 D' t
在图像数组的输出到文件的操作上,我发现fprintf比dlmwrite明显快很多,但这两个输出的数据格式有些差别,见下面操作:5 a3 P% i  h8 X% ^
>> a=[1 2 3;4 5 6;7 8 9]9 H( i2 l' j+ x. c
a =/ _; f, d4 q& C+ J
     1     2     3
' V2 [/ p( a$ {5 t5 C* d     4     5     6  ~/ T- r2 N' `$ W+ r
     7     8     92 X1 @2 P! S$ M, i: j! E
>>fid = fopen('exp.txt','w');; ?, @# \3 f, S$ d+ H% k: ~
fprintf(fid,'%2.0fn',a);
% r& K/ j) \1 g. gfclose(fid);
9 Q' f& Z! _: e' T0 W; z
% r5 z; @; x7 h0 m$ d>> type exp.txt( m( |& o/ t% X$ f
; P( \  V, `7 G# n
1
) u; O) a( ]$ L+ S, n' J43 k# R, R: {' p5 Q* M
7* v0 _/ b! A8 p6 v
2
; r" j3 W) E4 T+ a) c% [5
. Y, {& x# j* D% ^' Q/ N2 X7 `8
' e+ F7 P6 f" l- C7 u3
' X7 Q! z! @% C5 D1 r5 ]8 g66 @, J  @  F0 H. P+ @; `/ i
9
+ O% U) t. e$ F# j6 x: y  [fprintf输出是一列一列的从左到右输出。
6 ]& s* J. [/ P>> dlmwrite('eg2.dat',a,'n');
. @  B- \0 ?, n# A* S>> type eg2.dat9 w1 {5 V+ r, w; N% _
1& i9 \; \% E* p& C5 J
23 o1 p3 F- T7 L
3' o4 j" f. l4 G7 w. m
4. L3 O, [" w# e% y; c( U% a
5* u% [4 ^- W0 ]% i4 g* K: m
6  K7 {% m# O) z5 O2 X. ^' D
7) x; K, D9 i2 E- i7 o) e3 U/ p
8
8 B6 t$ j, {, C91 P/ e9 h! a3 f* y9 T0 ?
dlmwrite输出是一行一行的从上到下输出。
, ^3 X3 x, Y. h' l下面是一个比较简单的图像处理程序:$ P1 ^2 F. b" K
clear;%清除当前工作区所有变量6 w, ?0 f8 R% q8 n5 |+ _2 A$ d" u
data=imread('E:2D前处理eg1.bmp');%从图像文件夹中读取图像eg1.bmp
* X: h& T3 C+ }0 x+ m- C* O& hdata=double(data);%将图像数组data转化为double类型: p$ U. O* P. N- z! I
[x,y]=size(data);%求数组大小,x是data数组有多少行,y是data数组有多少列  I& r8 Z, f! m) I  Z1 p% [
data1=imresize(data,[x,y*2/1.732]);%实现对图像的左右插值放大2/1.732倍( t) r1 P3 ]' Z: k' m6 L; p
[x,y]=size(data1);%%求放大后图像数组大小
) h- ^# M5 S' @7 d$ Cfid = fopen('E:2D前处理Particletest.dat', 'wt');%打开图像数组的将要输出到文件1 Q7 k, L# T6 b& s0 _5 Q2 u# y) u1 U3 J
fprintf(fid, '%2.0ft%2.0fn', x, y);%输出x,y值' m$ M  s2 Y( l# c) F
fprintf(fid, '%2.0fn', data1);%输出图像数组数据
4 O- {' ]: c& kfclose(fid);%关闭文件指针
8 f7 j" V' ?$ m* y" n1 D) K( y, f/ b3 S9 N

: U  E+ K0 q! Y6 @3 a

该用户从未签到

2#
发表于 2020-4-2 18:27 | 只看该作者
导出的很详细,函数表述很详细,值得学习8 }0 l$ M0 j& q- T' ^* U
[x,y]=size(data1);%%求放大后图像数组大小
: A# h+ w3 y+ ~3 @
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 01:31 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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