arrays - 用值填充二进制向量中的奇数序列

标签 arrays matlab vectorization

我正在寻找解决此问题的矢量化解决方案: 设 A 为 0 和 1 的向量(大尺寸:> 10000)。

例如:

A = [0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 1 0 1 etc]

我想用 2 替换 1(奇数列)之间的 0 即产生:

B = [0 0 0 1 2 2 2 2 2 1 0 0 0 1 2 2 1 0 0 1 2 1 etc]

感谢您的帮助

最佳答案

使用 cumsum 可以轻松完成此操作和 mod :

A = [0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 1 0 1]

简短回答

A( mod(cumsum(A),2) & ~A ) = 2

A =   
     0   0   0   1   2   2   2   2   2   1   0   0   0   1   2   2   1   0   0   1   2   1

您请求填充奇数等级的岛屿,但通过将 mod(... 更改为 ~mod(... 您也可以轻松填满偶数等级的岛屿。

解释/旧答案:

mask1 = logical(A);
mask2 = logical(mod(cumsum(A),2))

out = zeros(size(A));
out(mask2) = 2
out(mask1) = 1

关于arrays - 用值填充二进制向量中的奇数序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30023626/

相关文章:

MATLAB bsxfun 或向量化

python - numpy 数组的逻辑迭代

arrays - 在 Swift 中将值附加到多维数组

matlab - 在 Matlab 图中叠加两个轴

c++ - 我该怎么做这样的 some_function({1,1,1,1})?

matlab - 将图形保存为 eps 文件时,Matlab 会切断颜色图标签

matlab - 将代码作为字符串检查,而不是解析文件

matlab - 使用矢量化赋值时出现意外的 matlab 行为

c - 你如何在 C 中创建一个指针数组?

java - 在Java中的类中声明数组的正确方法是什么