从单维点阵列创建点阵列

时间:2012-06-27 06:22:20

标签: matlab

我需要做的是采用单维数组,即:

[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]] ]

这种情况将会发生的原因是这些点将作为单个流存储在文本文件中,我需要将它们变成有意义的东西。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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]