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

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

4

2 回答 2

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
于 2012-06-27T06:29:32.403 回答
2

为了多样性,我只是添加了这个答案:

正如 H.Muster 所说,向量的串联将导致更大的向量或矩阵(取决于您的操作)。你可以这样做。

但您也可以使用元胞数组,它是一组称为“元胞”的数据容器。一个单元格可以包含任何类型的数据,而与同一单元格数组中的其他单元格包含的数据无关。

在您的情况下,可以使用稍微不同的语法(与 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]

于 2012-06-27T07:05:23.393 回答