2013-10-03 24 views
7

Hi Próbuję utworzyć tablicę komórek ciągów z:utworzyć macierz komórkową ciągów matlab

data = ['1';'2';'3';'4';'5';'6';'7';'8';'9';'10';'11';'12';'13';'14';'15';'16';'17';'18';'19';'20';]; 

gdzie spodziewa się szereg komórek 25 elementów. ale otrzymuję:

length(data) 

= 33 

tak oczywiście numery 12,13 itd. liczą się jako 2 bity.

Moje pytanie brzmi: w jaki sposób mogę zapewnić, że tablica komórek ma długość 20? również funkcja umieszczam macierz komórek musi być tablicą komórek ciągów, nawet jeśli używam ints!

+0

Łańcuchy są tablicami znaków w Matlabie. Łączenie takich łańcuchów daje jeden długi ciąg. Poza tym: długość, rozmiar itp. Rozmiar raportu w liczbie elementów zamiast bajtów. – jpjacobs

+0

możliwy duplikat [Utwórz tablicę ciągów] (http://stackoverflow.com/questions/7100841/create-an-array-of--strings) –

Odpowiedz

16

Co trzeba zrobić:

data = {'1';'2';'3';'4';'5';'6';'7';'8';'9';'10';'11';'12';'13';'14';'15';'16';'17';'18';'19';'20';}; 

Korzystając {}. Będą one tworzyć macierz komórek.

+0

oczywiście, mój błąd! – brucezepplin

+0

Panie, uratowałeś mnie od wiecznej nędzy. Dziękuję Ci. –

11

Można użyć {} zamiast [] zbudować komórkę, lub użyć strsplit zbudować dowolną komórkę długości łańcuchów reprezentujących liczby od 1 do N:

data = strsplit(num2str(1:N)); 

UPDATE: Najszybszy sposób aby to zrobić teraz, należy skorzystać z nieudokumentowanej funkcji sprintfc (patrz "c" na końcu), która drukuje każdy element do jego własnej komórki:

>> A = sprintfc('%g',1:20) 
A = 
    Columns 1 through 11 
    '1' '2' '3' '4' '5' '6' '7' '8' '9' '10' '11' 
    Columns 12 through 20 
    '12' '13' '14' '15' '16' '17' '18' '19' '20' 
>> which sprintfc 
built-in (undocumented) 
+0

lub 'data = arrayfun (@ (ii) ii, 1: N, 'uni', false)' –

+1

@GuntherStruyf: Zamknij! To nie daje ciągów. Myślę, że chodziło o 'dane = arrayfun (@ num2str, 1: N, 'uni', false)'. ;) – chappjc

+0

lub 'cellfun (@ num2str, num2cell (1: N), 'uni', false)'. Tyle możliwości! – chappjc

Powiązane problemy