Re: [心得] 資料型態 轉存方法
※ 引述《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
03/30 00:10, 1F
→
03/30 00:12, , 2F
03/30 00:12, 2F
→
03/30 00:14, , 3F
03/30 00:14, 3F
→
03/30 00:19, , 4F
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
03/30 00:22, 5F
→
03/30 00:28, , 6F
03/30 00:28, 6F
→
03/30 00:28, , 7F
03/30 00:28, 7F
→
03/30 00:30, , 8F
03/30 00:30, 8F
※ 編輯: profyang (140.112.247.141), 03/30/2015 00:33:27
→
03/30 00:35, , 9F
03/30 00:35, 9F
→
03/30 00:46, , 10F
03/30 00:46, 10F
→
03/30 00:53, , 11F
03/30 00:53, 11F
→
03/30 00:53, , 12F
03/30 00:53, 12F
→
03/30 00:54, , 13F
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
討論串 (同標題文章)
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章