我需要做的是采用一维数组,即:
[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]] ]
发生这种情况的原因是这些点将作为单个流存储在文本文件中,我需要将它们变成有意义的东西。
我需要做的是采用一维数组,即:
[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]] ]
发生这种情况的原因是这些点将作为单个流存储在文本文件中,我需要将它们变成有意义的东西。
首先请注意,行向量的水平串联将产生一个更大的行向量,而不是成对的行,即[[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
为了多样性,我只是添加了这个答案:
正如 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]。