Re: [問題]包含字串的矩陣+運算? 已回收

看板MATLAB作者 (~火火狗)時間14年前 (2011/06/03 13:47), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《crazyranger (及第師父)》之銘言: : 想請教各位板友們 : 1.在excel中,我輸入的矩陣如下 : a a b b c : a 0 0 1 1 1 : a 0 0 1 1 1 : b 1 1 0 0 1 : b 1 1 0 0 1 : c 1 1 1 1 0 : 包含左上空格是6x6的矩陣 : 我使用"xlsread"這個指令 只能讀到中間數字的部分 字串一起讀取到MATLAB中?? : 2.接下來的問題是,我想把上面的矩陣,相同名稱的行與列相加 : 將矩陣變成 : a b c : a 0 4 2 : b 4 0 2 : c 2 2 0 讀取EXCEL 檔案 包含字串 [numa.stra]=xlsread('....'); stra 就是字串部分 這是最近去MATLAB的免費課程學到的。 接下來回答問題2 (好像作業題XDD) 文字主要利用到strvcat與double變成數字 再unique 將相同的數字去除 再利用find 與for 迴圈 加上sum 完成問題二 假設excel檔案名稱為test001.xls,過程如下 clc clear %製作成副程式中... % %或是可以給予引索值加以合併指定之行或列 %未來功能合併相同之列 或 行 [numa,stra]=xlsread('test001.xls'); a=double(strvcat(stra(:,1))); c=unique(a,'rows'); b=double(strvcat(stra(1,:))); d=unique(b,'rows'); for i=1:size(c,1) tb=find(a==c(i,1)); if size(tb,1)>1 if tb(1,1)==1 numa=[sum(numa(tb,:));numa(tb(end)+1:end,:)]; a=a(tb(end):end); elseif tb(1,1)>1 && tb(1,1)<size(a,1) numa=[numa(1:tb(1)-1,:);sum(numa(tb,:));numa(tb(end)+1:end,:)]; a=a([1:tb(1)-1 tb(end):end]); else numa=[numa(1:tb(1)-1,:);sum(numa(tb,:))]; a=a([1:tb(1)-1 tb(end)]); end end end for i=1:size(d,1) tb=find(b==d(i,1)); if size(tb,1)>1 if tb(1,1)==1 numa=[sum(numa(:,tb)');numa(:,tb(end)+1:end)']'; b=b(tb(end):end); elseif tb(1,1)>1 && tb(1,1)<size(b,1) numa=[numa(:,1:tb(1)-1)';sum(numa(:,tb)');numa(:,tb(end)+1:end)']'; b=b([1:tb(1)-1 tb(end):end]); else numa=[numa(:,1:tb(1)-1)';sum(numa(:,tb)')]'; b=b([1:tb(1)-1 tb(end)]); end end end -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.127.6.148
文章代碼(AID): #1Dw7M98N (MATLAB)
文章代碼(AID): #1Dw7M98N (MATLAB)