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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
+ Z3 J! m2 \8 I4 w
1. 用fprintf 函数写数据到txt,xls
4 r% Y( g( _' z2 s0 n, {. V/ [7 ^# l" ^" `. o4 ?4 B* E9 H1 @
Example:5 k9 B; v) e# N, C0 J

% O6 ]+ O' L# q) P* kx = 0:.1:1;
0 E) Z: J) b1 q1 Z6 ~y = [x; exp(x)];( A! U4 p" w9 T& U
fid = fopen('exp.txt', 'w');0 N. z0 x* F3 e0 y6 F0 k
fprintf(fid, '%6.2f .8fn', y);) y5 H% w! F: @; @* h, z7 |# R
fclose(fid)
) X5 T: H$ S( ?6 [" ]tip:执行上述代码执行,肯定不会换行的,换行的问题试一下下面的代码' E5 U3 H7 E: x% h$ B/ @5 W3 q3 N- w; f
! i& p: u! L2 E6 t% ~
x = 0:.1:1;5 k( D/ M) a6 P4 n
y = [x; exp(x)];
5 f9 d4 X  j, K: Ufid = fopen('exp.txt', 'wt');
8 a5 S% [3 d  v7 zfprintf(fid, '%6.2f .8fn', y);. \7 P2 z; E6 x
fclose(fid);
2 [9 f5 i4 s6 j9 Z6 h
2 I! O) g) B% A这次就没有问题了,我们要注意fopne的参数wt 而不是 w,这是matlab的在线帮助的东东9 y5 P5 ]6 b# e- |# K. Q% F
  f/ v/ i2 c6 ]$ |' ^
fid = fopen(filename, permission_tmode)on Windows systems, opens the file in text
: q" ~3 o0 N( y+ u- @mode instead of binary mode (the default). Thepermission_tmodeargument consists4 r8 i5 t6 M- l( y2 I
of any of the specifiers shown in thePermission Specifierstable above, followed
# e+ q2 m+ L. L- @- g: p% {by the lettert, for example'rt'or'wt+. On UNIX®systems, text and binary mode( X2 Q# v9 n& _, R& v9 m
are the same. (UNIX is a registered trademark of The3 _  I2 W( j/ Z* \9 c
Open Group in the United States and other countries).8 ?) B+ P+ ^& f; `! e

1 s+ n3 C3 Y6 j0 i: G就是有两种读取模式binary or text. When choosing the binary model,No characters are! l  Y1 t6 B, j; r! Z3 s/ J
given special treatment. 所以我们选择要注明text模式。) Q0 h: z. ~( P4 R! y0 w

6 ~6 B1 J' z" o5 @, e: p3 z# O7 D2. dlmwrite :将一个矩阵写到由分隔符分割的文件中。
! `7 ?: ?6 H" b  T) t$ m/ d% n( f' m. p4 _! M
在保存整数到文件时使用save存为ascii文件时,常常是文件里都是实型格式的数据(有小数点,和后面很多的0,看着很不方便)。于是要保存此类数据时,我们可以使用此dlmwrite命令。
! C% {8 c* W! P" ]4 Q
8 r1 z6 j# L: w4 I; Z使用方法:/ G2 i* H, Q& S% W4 `6 M
dlmwrite('filename', M)2 a% [. T9 k7 M- H
使用默认分隔符“,”将矩阵M写入文本文件filename中;
$ n0 N9 x. A3 M1 X0 Fdlmwrite('filename', M, 'D')
& c; s- \8 G0 b' Y8 [0 `6 ?使用分隔符D分割数据,“t”表示tab分割,“,”为默认分割符;; O) f" b, i" t3 i' p
dlmwrite('filename', M, 'D', R, C)7 ~6 ~" W. ?0 ^5 g# p: d. z2 d
从矩阵M的第R行、第C列开始,作为要写矩阵块的左上角,将数据用D分割写入文件。
: t8 U" A! r" @  C+ u, e/ N其他用法有:- U7 S) z* w9 n4 ^, k5 {
dlmwrite('filename', M, 'attrib1', value1, 'attrib2', value2, ...)
+ `' `- f  [; ]6 |9 P2 H0 vdlmwrite('filename', M, '-append')9 g1 g! k- ]' o4 S& _' v. W
dlmwrite('filename', M, '-append', attribute-value list)
5 e7 v, h7 _4 s  a; z
5 ^5 h6 g5 [, u例如:7 S; o( L& B  w  b
a = [1 2 3; 4 5 6; 7 8 9];' V" l& x3 g  O: Y
dlmwrite('test.txt', a);
% P6 u8 r2 J! K: l) E
+ D7 L3 @, F3 f/ `' d0 A" _* o/ F则test.txt中的内容为:
! [- J4 n* T* E1,2,38 Z" C( n! f! R! y
4,5,6# h" h8 C. \# w$ }& L' c" Q$ {
7,8,9
" c. ^2 _7 [5 F- u7 W1 A) j. o* G1 z
2 A: i; ]7 q1 Y$ L而使用save5 t' Z8 D; G3 I  E! h
a = [1 2 3; 4 5 6; 7 8 9];2 @* W2 t' O8 o
save 'tst.txt' a -ascii;文本文件里的内容为:
4 V6 \# z, z' O1 m, [% V, |; _9 L" o   1.0000000e+000   2.0000000e+000   3.0000000e+000
4 V% d8 `8 `5 a* E& m, G   4.0000000e+000   5.0000000e+000   6.0000000e+000( i, W9 e& i& a- J; M. k$ I
   7.0000000e+000   8.0000000e+000   9.0000000e+000
' k0 E% M8 d3 g: ]  q0 {. |; r) P  J6 ?  @

+ ?/ y+ T4 }1 T9 E3.xlswrite 写入excel/ k) E- b6 `2 _+ L" A0 v( i3 q1 g

: Q, |  j/ p- D2 J4 {6 d4 s" D4.fprintf和dlmwrite区别2 r0 o+ O; k. w0 L% o( p

' p" s3 d& d3 p! C3 \# K# U  fMATLAB在图像处理中的应用,实际是对图像矩阵的操做运算,MATLAB在图像处理中的常用的命令有:
2 a/ j' b7 y# j3 f2 r7 f$ Himread(): 从图像文件夹中读取图像的函数;
! g0 [+ [( j8 p" r0 u4 g/ Simwrite(): 输出图像的函数;" [, h% {' T( ^7 L7 X' l
imshow(), image(): 图像显示于屏幕的函数;
6 |, a/ U8 ]# Gimcrop(): 对图像进行裁剪的函数;;
) q; G1 g  A, k& U& Fimresize(): 实现对图像的插值缩放的函数;1 h2 p( C; q' n1 r
imrotate(): 用实现对图像的旋转。
6 d/ o9 y1 J" Kim2double(),double(): 将图像数组转化为double类型;& x, u( ~5 P2 w6 {
im2uint8(),uint8(): 将图像数组转化为uint8类型;
9 A' m+ Q0 w* i2 R+ kim2uint16(),uint16(): 将图像数组转化为uint16类型;
- H  M" d+ C8 s8 Y关于上述的命令使用方法可以参考一些MATLAB方面的书籍或者用MATLAB自带的帮助(help or doc)命令.
  g6 \) s9 d, c/ C如 我想知道dwt2()命令的使用方法 可以执行下面的命令
  i2 Y& d; v4 N0 J' ~2 K" T+ O>> help dwt2 或 >>doc dwt2
; d( g: V! N# s6 B系统就会告诉你它的使用要求和方法,如果系统说找不到对应的帮助文件,那就可能是你装的MATLAB里面没有这个命令,那很可能这个命令就不能使用.
$ B+ {- d% i& C# y在图像数组的输出到文件的操作上,我发现fprintf比dlmwrite明显快很多,但这两个输出的数据格式有些差别,见下面操作:
9 t6 [( d; ~$ \$ j; ?>> a=[1 2 3;4 5 6;7 8 9]  `4 ?% U6 z( w, n7 W+ y; [4 {
a =$ ~( _0 y3 r. R6 L# M4 l- R/ F
     1     2     39 t. ^% A8 o' z  W
     4     5     6: x; y1 Q" F6 f5 q
     7     8     9
) e9 W$ r, H6 U! B3 W>>fid = fopen('exp.txt','w');' ~: X$ _* P" B  C! M1 J& ]
fprintf(fid,'%2.0fn',a);
% ^; L$ v5 P5 p8 D5 ?0 z6 P8 Mfclose(fid);
! N! `# \/ l8 ?1 _: y7 l6 i( D9 n8 M' q
>> type exp.txt
6 p% i# M( h% b2 s, e7 z- {" Y  Y  |+ H# J, O: b$ [9 F
1
4 `. f  Y/ H  e+ E5 T; Q$ |4
6 a+ \8 O& C- k7
; c! F( C" y, c20 A; g1 u' C6 h" y6 t3 {
5  P! X' Q# E3 t! K
8, T. y& Y  i2 V7 R
3
$ D9 a( C$ V  i( v7 P' X& Q65 B* [$ e* e: b5 ]8 t$ e
9
0 M$ N* a4 W" ^9 p# C/ {9 mfprintf输出是一列一列的从左到右输出。
9 W# Y, W: U3 y>> dlmwrite('eg2.dat',a,'n');
( C4 Q  y. n0 Z5 x>> type eg2.dat
7 ]3 _# G- J" F- m) e: K1+ t9 y* D" D! Q# y. n  K# |
2
) g' ^  f# F- _. s+ {4 a39 O0 d5 y& `7 t$ E) v$ O
45 n2 r9 E: Q! n6 N4 ]4 S1 _1 ^
5+ y; q! E) j$ s, r
6$ H# p9 C% t; A
7/ Q2 h: u& }/ d- l5 ^2 e% j3 f% m
8- z6 B1 ^" t) L. t
99 t/ n2 W; Y8 i: T' e
dlmwrite输出是一行一行的从上到下输出。/ q. G: @3 q9 _! j: o' t- M; }
下面是一个比较简单的图像处理程序:
% n# U; z- D8 w" d  A( fclear;%清除当前工作区所有变量5 {$ ~5 p) D0 c
data=imread('E:2D前处理eg1.bmp');%从图像文件夹中读取图像eg1.bmp" O* h9 s- H3 C: ~2 u, L* C# z9 W
data=double(data);%将图像数组data转化为double类型
; w5 n- L5 w( N) Z[x,y]=size(data);%求数组大小,x是data数组有多少行,y是data数组有多少列( j8 @4 f# W1 z( B( k% G
data1=imresize(data,[x,y*2/1.732]);%实现对图像的左右插值放大2/1.732倍
5 k* Y  s" h. ?2 I8 H' T# Y$ _  d) S/ S[x,y]=size(data1);%%求放大后图像数组大小) j$ \3 m  F% e1 {) T6 M+ Z5 K
fid = fopen('E:2D前处理Particletest.dat', 'wt');%打开图像数组的将要输出到文件
& H# r- C6 _2 S. M, vfprintf(fid, '%2.0ft%2.0fn', x, y);%输出x,y值0 D9 M1 F6 q) ^* d) ?! p$ l: t, g
fprintf(fid, '%2.0fn', data1);%输出图像数组数据
; P) P8 v3 X' q5 U; xfclose(fid);%关闭文件指针. S) U  D! z7 j9 W5 _* D' f
6 @) R( x# I8 |5 K" Y8 K" [4 }: [
" g7 x! N/ N" E6 Z5 _$ U: S# W

该用户从未签到

2#
发表于 2020-4-2 18:27 | 只看该作者
导出的很详细,函数表述很详细,值得学习
+ d. n; Z0 g0 z3 i8 t$ E: L) n[x,y]=size(data1);%%求放大后图像数组大小
/ t9 n$ V/ l/ p) k$ v1 o
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-22 08:48 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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