我需要做的是采用单维数组,即:
[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]] ]
这种情况将会发生的原因是这些点将作为单个流存储在文本文件中,我需要将它们变成有意义的东西。
答案 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]
。