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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
- @8 ~6 T; `; z
1. 用fprintf 函数写数据到txt,xls, w- n4 r$ P% S% b% C
5 s: n( }" }: o2 z8 W
Example:7 a8 Y( M7 r" t2 v* J9 v6 H2 W# z3 p
+ ^7 U/ }7 m9 C9 y6 |; v- C
x = 0:.1:1;- p) i0 V: `8 d# w5 a5 U
y = [x; exp(x)];
0 L# G" ]& b) F1 Jfid = fopen('exp.txt', 'w');
! g5 D5 C, d$ M. u8 M8 tfprintf(fid, '%6.2f .8fn', y);" x, ]2 d$ Y. O7 w  z  Q- w
fclose(fid)
* r1 i  c3 G# C3 `) @& y* h5 jtip:执行上述代码执行,肯定不会换行的,换行的问题试一下下面的代码7 |, A  g9 _9 K# m( w4 r' ]4 g
. I* r9 @) L# {+ p# P
x = 0:.1:1;9 K- [  [' n  v8 R# ^
y = [x; exp(x)];+ ~* d) g  h' d# ~! W) s+ m
fid = fopen('exp.txt', 'wt');$ g. e* p1 S3 q
fprintf(fid, '%6.2f .8fn', y);/ E- a% i7 b% R" Z& M: u, @
fclose(fid);
/ ]  r3 x. ~( u5 O0 U: @8 R, Y. M  H1 r4 [
这次就没有问题了,我们要注意fopne的参数wt 而不是 w,这是matlab的在线帮助的东东
+ {$ c- K7 }) K# I! c9 m6 y  K
: S3 m* Y4 v( [, j& E5 u7 s# L2 Q+ T+ gfid = fopen(filename, permission_tmode)on Windows systems, opens the file in text/ O! ?9 e9 `5 `$ g  t! ?* N
mode instead of binary mode (the default). Thepermission_tmodeargument consists
/ N3 b+ F" f. p  N) A+ }' s; n) {of any of the specifiers shown in thePermission Specifierstable above, followed
/ M: y$ }$ k5 S8 ~9 rby the lettert, for example'rt'or'wt+. On UNIX®systems, text and binary mode
/ L# l+ J7 X) Tare the same. (UNIX is a registered trademark of The
3 a5 d  ?/ Z* g8 `$ K/ L% h) tOpen Group in the United States and other countries).+ i$ K; _7 K* \3 H
" E) a) ~3 _" e
就是有两种读取模式binary or text. When choosing the binary model,No characters are1 I$ W# r, L5 C" C7 a' D5 A8 k
given special treatment. 所以我们选择要注明text模式。
# A0 H1 d) _/ N6 z7 x" G" ^: p5 J" s, `9 Q5 u
2. dlmwrite :将一个矩阵写到由分隔符分割的文件中。
' L2 s4 `. F- K" y3 s. [, Y) H7 k! E$ p0 a
在保存整数到文件时使用save存为ascii文件时,常常是文件里都是实型格式的数据(有小数点,和后面很多的0,看着很不方便)。于是要保存此类数据时,我们可以使用此dlmwrite命令。. r6 E& Z% X2 Q% `
' }- Z. R; B$ N( b( j/ y7 {
使用方法:
; j) e  b% C) ?' H2 V5 kdlmwrite('filename', M)
+ c. w2 W* q4 `! M6 i+ T: J8 M使用默认分隔符“,”将矩阵M写入文本文件filename中;
( o  _7 E% x1 D& F. qdlmwrite('filename', M, 'D')
+ F# Y/ N- a4 f- L) m使用分隔符D分割数据,“t”表示tab分割,“,”为默认分割符;5 D) [( ]5 q3 I. J% z9 q, P# f
dlmwrite('filename', M, 'D', R, C)4 ^3 i8 M% H: D- K! Z$ a  ~
从矩阵M的第R行、第C列开始,作为要写矩阵块的左上角,将数据用D分割写入文件。
  [+ ?  l! f! K" k. t9 G其他用法有:: C  F" S! z- K4 E5 R. }+ c
dlmwrite('filename', M, 'attrib1', value1, 'attrib2', value2, ...)
" ~7 I; u) {6 B' f. Odlmwrite('filename', M, '-append')
) ?# k: i. E' U, D1 pdlmwrite('filename', M, '-append', attribute-value list)5 z  m) B/ d/ V7 A

% V* a* Y- O& d2 W0 R4 t- K) ?例如:
  K/ e2 x7 W& K& \9 Ra = [1 2 3; 4 5 6; 7 8 9];
: X) L& c6 @4 R4 L+ [5 n+ r' p( qdlmwrite('test.txt', a);
" ?) G/ ^* a" Y2 |; V5 ~1 x' W. l3 F& |9 V# M
则test.txt中的内容为:. M6 l% }  Y$ }8 P! @+ O( O
1,2,3
2 B+ r6 b8 K: }- {, i( z1 T4,5,62 c( o; {* s9 ~, p: |* ^- i
7,8,9
! O* o- H; Q- Q( J/ E; d( k" U# ?5 \8 z9 O  `/ s, T' a2 Y* p- {; e
而使用save& M) @  n5 |' K" v" A% B' ~
a = [1 2 3; 4 5 6; 7 8 9];9 x: b8 ^. a, v- a6 J2 m8 w' k
save 'tst.txt' a -ascii;文本文件里的内容为:4 u$ G! m1 Z- k% x5 N% Z: q
   1.0000000e+000   2.0000000e+000   3.0000000e+000) F0 x7 G8 I. X6 h
   4.0000000e+000   5.0000000e+000   6.0000000e+000- O1 c0 ?8 B( X9 r' G2 t
   7.0000000e+000   8.0000000e+000   9.0000000e+000/ t( X, d3 M2 m' v: h) z

; j( N# @1 t& \) R  _
" |$ _& s: g$ e% |3.xlswrite 写入excel" W: G4 f! P- z0 z4 z. r0 [) Y
" @/ P. G, M" V1 l8 a
4.fprintf和dlmwrite区别  S0 y( V/ i3 D' c  {  W

; |# i* l2 y8 w% d# Q; w, |MATLAB在图像处理中的应用,实际是对图像矩阵的操做运算,MATLAB在图像处理中的常用的命令有:
) [5 @9 ^5 G+ T* n0 }5 oimread(): 从图像文件夹中读取图像的函数;
0 [, h6 X  [: b! y" wimwrite(): 输出图像的函数;/ l* U4 H& s( ~
imshow(), image(): 图像显示于屏幕的函数;
+ q' z7 v  U4 [0 Zimcrop(): 对图像进行裁剪的函数;;
# u% }7 D7 a6 H! }. J" J, X" e8 Kimresize(): 实现对图像的插值缩放的函数;
( U  p2 M5 ?+ x: {$ c5 Y4 _  Wimrotate(): 用实现对图像的旋转。
: P! U  W$ L7 y0 U( `9 F1 q) Sim2double(),double(): 将图像数组转化为double类型;3 D0 U: ]2 T- u
im2uint8(),uint8(): 将图像数组转化为uint8类型;
. k0 O8 o& p/ S- E/ M: Nim2uint16(),uint16(): 将图像数组转化为uint16类型;# f' R3 r0 @# E" A4 s4 Q+ \- A$ c
关于上述的命令使用方法可以参考一些MATLAB方面的书籍或者用MATLAB自带的帮助(help or doc)命令.
* f0 |* X- Q+ m如 我想知道dwt2()命令的使用方法 可以执行下面的命令/ o& T+ X9 l! B" C
>> help dwt2 或 >>doc dwt2" @0 x) ^8 T: Y$ C, W5 z
系统就会告诉你它的使用要求和方法,如果系统说找不到对应的帮助文件,那就可能是你装的MATLAB里面没有这个命令,那很可能这个命令就不能使用.9 s7 [! E, a* X. p( a  x; k
在图像数组的输出到文件的操作上,我发现fprintf比dlmwrite明显快很多,但这两个输出的数据格式有些差别,见下面操作:
- v6 f2 Z$ b1 J, Y9 z  w, h0 R>> a=[1 2 3;4 5 6;7 8 9]! V: u8 @" @8 o- A% Y/ A$ N. e
a =
( L: d0 o$ @. ]* @2 A' J: }     1     2     3
' K/ p6 I; N3 g# v6 }1 {( z     4     5     6
% A8 Y: l, q9 P+ a. s% G; }     7     8     99 a* T% j! P' q/ ]/ t3 P5 [; C! s+ E9 T
>>fid = fopen('exp.txt','w');
) b$ x9 m/ }6 b# |* o0 L# P& ?! X. Lfprintf(fid,'%2.0fn',a);+ i5 _; b2 A4 }# w$ X
fclose(fid);
& ^9 W$ M- x- B- _. L! D& x& b! k" x3 o1 h' t7 \. W& R: B
>> type exp.txt/ _' P( D9 m& Q2 }  ]: ^
2 q/ e3 r  \2 J/ r% f
1
& \3 J) S- D# }5 H! t41 P) D5 q8 l, |) E  m
7. t# T; R) B) i. Q7 N. I$ a
2
% Z1 d2 Q7 `+ ?: w+ O' Q5
0 @4 s$ T9 z5 @! g83 T7 m0 n' y0 N9 U* ]; j6 c
3$ |- L4 q6 T" C  {0 e
6, t1 u9 l# G. j- c
9
9 c6 b) _; m- s9 r2 J! Wfprintf输出是一列一列的从左到右输出。
3 f/ h# T$ x; w/ ^$ L+ h% A" o>> dlmwrite('eg2.dat',a,'n');
) Q/ T6 w8 f2 b/ f- C3 d>> type eg2.dat5 `+ q3 t: W: W0 y
1! ^5 c& G2 F, \
2) _- N0 u9 J: C) l8 i8 {
3$ @8 p+ |' ?9 R- z
4
) j' w$ U. p* v3 k; u5 n5 `5
6 w  C9 T3 E0 {6# C6 ?8 S/ d) K/ U
72 l( S6 z% I  ^- x
8; v2 S* r  v8 v+ j9 b3 `/ w
9
$ \% Q1 p- O# w/ g. Bdlmwrite输出是一行一行的从上到下输出。
, b: L4 n5 H5 ^& r下面是一个比较简单的图像处理程序:# S5 S5 f! Q2 `! n) @- c" i% v
clear;%清除当前工作区所有变量
3 F$ M8 `+ y1 w8 Adata=imread('E:2D前处理eg1.bmp');%从图像文件夹中读取图像eg1.bmp. ~3 z+ k( I9 T
data=double(data);%将图像数组data转化为double类型8 O% J$ ~6 w' f& i( @3 y
[x,y]=size(data);%求数组大小,x是data数组有多少行,y是data数组有多少列
) ^0 ?, j! Q" }3 L( w( Z' z$ k8 {$ t' Pdata1=imresize(data,[x,y*2/1.732]);%实现对图像的左右插值放大2/1.732倍
1 j2 `) y+ h: f5 D( Q6 u8 _+ k% g[x,y]=size(data1);%%求放大后图像数组大小/ p! I' W: y1 Z( q: F
fid = fopen('E:2D前处理Particletest.dat', 'wt');%打开图像数组的将要输出到文件: H+ G% e$ U" ~! Q
fprintf(fid, '%2.0ft%2.0fn', x, y);%输出x,y值/ |" }5 D7 _  G! b1 J$ q/ |
fprintf(fid, '%2.0fn', data1);%输出图像数组数据8 v3 [8 P) \6 M$ w# s1 ?6 S+ k
fclose(fid);%关闭文件指针
* Z7 l* C4 S% t6 Q9 \# Y0 q9 ?2 L

- Z8 B0 ?) L9 A" D2 S6 D0 S

该用户从未签到

2#
发表于 2020-4-2 18:27 | 只看该作者
导出的很详细,函数表述很详细,值得学习$ ^( `% u$ a5 Z$ V/ D
[x,y]=size(data1);%%求放大后图像数组大小
: _9 }! b- M, s/ B4 R
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 02:43 , Processed in 0.156250 second(s), 24 queries , Gzip On.

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

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

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