Re: [心得] 資料型態 轉存方法

看板MATLAB作者 (prof)時間10年前 (2015/03/30 00:09), 10年前編輯推噓2(2014)
留言16則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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

03/30 00:10, , 1F
暫時想不到不用for的作法= ="
03/30 00:10, 1F

03/30 00:12, , 2F
我沒用for,可是用的很複雜,看上面推文XD
03/30 00:12, 2F

03/30 00:14, , 3F
沒用過dec2bin,我試試看把我的code改用這個functio
03/30 00:14, 3F

03/30 00:19, , 4F
用for跟用cellfun不知道誰比較慢 代我試試
03/30 00:19, 4F
我的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

03/30 00:22, , 5F
還有這招XD
03/30 00:22, 5F

03/30 00:28, , 6F
dec2bin(A(n,:)).' 後面的.'是轉置嗎 可是我實際上跑
03/30 00:28, 6F

03/30 00:28, , 7F
好像沒差
03/30 00:28, 7F

03/30 00:30, , 8F
因為我試dec2bin(A(n,:))跑出來會是8*1的東西我覺得怪怪
03/30 00:30, 8F
※ 編輯: profyang (140.112.247.141), 03/30/2015 00:33:27

03/30 00:35, , 9F
c大的code我也用新的(用dec2bin) 結果我電腦都大概20s
03/30 00:35, 9F

03/30 00:46, , 10F
我試的結果也是
03/30 00:46, 10F

03/30 00:53, , 11F
第二行可以改成auint8 = uint8(bin2dec(achar));
03/30 00:53, 11F

03/30 00:53, , 12F
會快很多
03/30 00:53, 12F

03/30 00:54, , 13F
推錯篇...不過就是C(n,:)的迴圈不要跑,改成上面
03/30 00:54, 13F
找到不用for的了: B=reshape(dec2bin(A),size(A,1),[]); C=bin2dec(B); ※ 編輯: profyang (140.112.247.141), 03/30/2015 00:57:01

03/30 00:57, , 14F
根本神速= =
03/30 00:57, 14F

03/30 01:02, , 15F
果然樓上厲害!!
03/30 01:02, 15F

03/30 13:35, , 16F
超神手
03/30 13:35, 16F
文章代碼(AID): #1L62E_-Q (MATLAB)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1L62E_-Q (MATLAB)