Re: [問題]包含字串的矩陣+運算? 已回收
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):