2012-06-27 94 views
0

啥子我需要做的是採取的一維陣列,即:從點的一維陣列創建的點陣列

[1, 1, 2, 2, 3, 3] 

並把它變成點的數組:

[[1, 1], [2, 2], [3, 3]] 

我希望有一個簡單的原生matlab方法來做它,而不是一個函數。這將是進入點的集合,即:

[ [[1, 1], [2, 2], [3, 3]], 
    [[4, 4], [5, 5], [6, 6]], 
    [[7, 7], [7, 7], [8, 8]] ] 

這種事情發生的原因是該積分將被存儲在一個文本文件作爲單個流,我需要把它們變成有意義的事。

回答

3

首先請注意,行向量的水平串聯將導致一個較大的行向量而不是一對行,即[[1, 1], [2, 2], [3, 3]][1 1 2 2 3 3]相同。因此,你需要垂直連接它們。

您可以嘗試

a = [1, 1, 2, 2, 3, 3]; 

b = reshape(a, 2, floor(length(a)/2))'; 

這將導致在每一行代表一個點的座標矩陣。

b = 

    1  1 
    2  2 
    3  3 
+0

您也可以使用第三維來創建集。因此,要麼在上面的答案中使用像b一樣的3x2向量,並且執行類似SET = cat(b,AnotherB,3)的事情,否則如果讓這些對繼續在第三維上更有意義,那麼將上面的重構更改爲b = reshape(a,[2,1,floor(length(a)/ 2)])然後你可以使用正常的垂直連接來創建一個集合:SET = [b; AnotherB] – Dan

2

我只是加入這個答案的多樣性的緣故:

正如H.Muster說,向量的串聯將導致較大的載體或基質(取決於你的操作)。你可以去那。

但是,您也可以使用cell array,它是一組稱爲「單元」的數據容器。單元格可以包含任何類型的數據,無需考慮其他單元格包含在同一單元格陣列中的內容。

在你的情況,創建單元陣列可以使用稍微不同的語法(比H.Muster的回答)來完成:

a = [1, 1, 2, 2, 3, 3]; 
p = mat2cell(a, 1, 2 * ones(1, numel(a)/2)) 

p是一個單元陣列,其中包含每個小區的1×2點向量。要訪問單元格數組中的元素,您必須使用花括號。例如,第二點將是p{2} = [2, 2]