看板 MATLAB 關於我們 聯絡資訊
※ 引述《Lionel (跟快樂交往)》之銘言: : 大家好 大家晚安 : 假設我有以下資料 : 0 0 0 0 0 0 0 0 : 0 0 0 0 0 0 0 1 : 1 0 0 0 0 0 0 0 : 以上為 (i,j)值僅有{0,1} : 3*8的double型態 : 想要的到 : 00000000 : 00000001 : 10000000 : 欲得 : 把(i,1)到(i,8)抓起來在一起 : 3*1的uint8 : 3*1的char : 我知道uint8()跟char()的function : 可是 轉出來依舊還是3*8矩陣 : 感謝大家 如原文底下推文你的3*1 char是不可能的 因為你字的長度就是>1 底下是接近的code: A=[0 0 0 0 0 0 0 0; 0 0 0 0 0 0 0 1; 1 0 0 0 0 0 0 0]; C=zeros(size(A,1),1); for n=1:size(A,1) B(n,:)=dec2bin(A(n,:)).'; C(n,:)=uint8(bin2dec(B(n,:))); end B會是3*8的char (如果你直接用char轉出來不會是你原來01這些字元 是他ASCII code對應字元) C就是3*1的矩陣[0;1;128] -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.247.141 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1427645375.A.F9A.html
profyang: 暫時想不到不用for的作法= =" 03/30 00:10
celestialgod: 我沒用for,可是用的很複雜,看上面推文XD 03/30 00:12
celestialgod: 沒用過dec2bin,我試試看把我的code改用這個functio 03/30 00:14
profyang: 用for跟用cellfun不知道誰比較慢 代我試試 03/30 00:19
我的code改成以下: A=[0 0 0 0 0 0 0 0; 0 0 0 0 0 0 0 1; 1 0 0 0 0 0 0 0]; A=repmat(A,100000,1); tic; B=cell(size(A,1),1); %主要是多這行 for loop有先宣告大小速度差很多 C=zeros(size(A,1),1); for n=1:size(A,1) B{n}=dec2bin(A(n,:)).'; C(n,:)=uint8(bin2dec(B{n})); end toc; 吐出來結果似乎是跟c大的一樣(當然我為了測速度把A變大100000倍) 實測下來好像for loop跟cellfun一樣慢XDDD
Lionel: 還有這招XD 03/30 00:22
Lionel: dec2bin(A(n,:)).' 後面的.'是轉置嗎 可是我實際上跑 03/30 00:28
Lionel: 好像沒差 03/30 00:28
profyang: 因為我試dec2bin(A(n,:))跑出來會是8*1的東西我覺得怪怪 03/30 00:30
※ 編輯: profyang (140.112.247.141), 03/30/2015 00:33:27
profyang: c大的code我也用新的(用dec2bin) 結果我電腦都大概20s 03/30 00:35
celestialgod: 我試的結果也是 03/30 00:46
celestialgod: 第二行可以改成auint8 = uint8(bin2dec(achar)); 03/30 00:53
celestialgod: 會快很多 03/30 00:53
celestialgod: 推錯篇...不過就是C(n,:)的迴圈不要跑,改成上面 03/30 00:54
找到不用for的了: B=reshape(dec2bin(A),size(A,1),[]); C=bin2dec(B); ※ 編輯: profyang (140.112.247.141), 03/30/2015 00:57:01
profyang: 根本神速= = 03/30 00:57
celestialgod: 果然樓上厲害!! 03/30 01:02
Lionel: 超神手 03/30 13:35