arrays - 在每第 n 个元素之后填充数组

标签 arrays matlab

如何在数组中的每个第 n 个元素之后添加 [someVal,someVal]

例如,假设我有

p = [0,1,2,3,4,5]

现在我想在每 2 个元素之后插入 [9,9] 一些内容,所以我的结果应该是

ans = [0 1 9 9 2 3 9 9 4 5 9 9]

如果你有

p = [1,2,3]

那么你最终应该得到

p = [1 2 9 9 3]

我想知道如何解决这个问题,如果你能告诉我我应该看哪里,那就太好了,因为我是 MatLab 的新手。

感谢您的宝贵时间。

最佳答案

这是一个向量化解决方案,用于在每 n 个元素之后将向量 q 插入到向量 p 中:

N = numel(p);
M = mod(N, n);
p_pad = [p(:); zeros((n - M) * (M > 0), 1)];
res = [reshape(p_pad, n, []); repmat(q(:), 1, numel(p_pad) / n)];
res = res(1:N + numel(q) * fix(N / n));

您可以通过添加以下内容保留输出的输入向量行/列属性:

if isrow(p)
    res = res';
end

说明

用一个例子来解释这一点是最简单的。我们从向量 p 开始,我们希望将其 reshape 为一个矩阵,每列都有 n 个元素。如果 p 中的元素数量不是 n 的倍数,我们需要“填充”它(例如,用零)。例如,对于 p = [1 2 3 4 5 6 7], n = 3,我们将 p reshape 为以下矩阵:

1    4    7
2    5    0
3    6    0

现在我们使用 repmat 复制向量 q 并生成另一个具有相同列数的矩阵,其中每列为 q:

9    9    9
9    9    9

然后我们垂直连接这两个矩阵(在我的代码中,新矩阵称为 res):

1    4    7
2    5    0
3    6    0
9    9    9
9    9    9

当我们再次将该矩阵转换为向量并将列连接在一起后,我们应该会得到所需的结果。请注意,我们还想丢弃尾随的 0 0 9 9 (由于填充而形成),因此让我们计算结果中预期的元素 L 数量:

L = N + length(q) * fix(N / n)

然后提取,我们将从 res 中提取第一个 L 元素。

通常对列进行操作是最简单的,因为 MATLAB's linear indexing是列主。

示例

让我们将其放入一个函数中:

function y = insertn(p, q, n)
    N = numel(p);
    p_pad = [p(:); zeros((n - mod(N, n)) * (mod(N, n) > 0), 1)];
    y = [reshape(p_pad, n, []); repmat(q(:), 1, numel(p_pad) / n)];
    y = y(1:N + numel(q) * fix(N / n));

    if isrow(p)
        y = y';
    end 

现在让我们测试不同的输入:

>> insertn(0:5, [9 9], 2)
ans =
    0    1    9    9    2    3    9    9    4    5    9    9

>> insertn(1:3, [9 9], 2)
ans =
    1    2    9    9    3

>> insertn(1:7, [9 9], 3)
ans =
    1    2    3    9    9    4    5    6    9    9    7

关于arrays - 在每第 n 个元素之后填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14631182/

相关文章:

javascript - 使用indexOf时数组排序不正确/不可预测?

javascript - 将数组中的 json 对象字符串化,等于日期

java - 逐层旋转二维数组

matlab - 不同长度的向量之间的相关性

matlab - double 图像上的图像泊松噪声(散粒噪声)

java - 随机数组生成器

python - Pandas:数据框与用于定义它的 numpy.array 之间的关系

matlab - 将 Matlab 高斯导数转换为 Opencv

file - matlab输入n维数据需要什么格式?

java - Java 中的 Matlab 控制