matlab - 如何在矩阵中间创建一个充满钻石的钻石?

标签 matlab matrix

我知道下面的代码:

N = 5;
assert(N>1 && mod(N,2)==1);
A = zeros(N);

% diamond mask
N2 = fix(N/2); 
[I,J] = meshgrid(-N2:N2);
mask = (abs(I) + abs(J)) == N2;

% fill with zeros
A(mask) = 1;

将矩阵 A 转换为:

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

但是我想让钻石填满1。 我该怎么办?

最佳答案

这是使用 bsxfun 的矢量化方法-

Nh = (N+1)/2;
range_vec = [1:Nh Nh-1:-1:1];
out = bsxfun(@plus,range_vec(:),range_vec) > Nh

样本运行-

1) N = 5 :

out =
     0     0     1     0     0
     0     1     1     1     0
     1     1     1     1     1
     0     1     1     1     0
     0     0     1     0     0

2) N = 9 :

out =
     0     0     0     0     1     0     0     0     0
     0     0     0     1     1     1     0     0     0
     0     0     1     1     1     1     1     0     0
     0     1     1     1     1     1     1     1     0
     1     1     1     1     1     1     1     1     1
     0     1     1     1     1     1     1     1     0
     0     0     1     1     1     1     1     0     0
     0     0     0     1     1     1     0     0     0
     0     0     0     0     1     0     0     0     0

关于matlab - 如何在矩阵中间创建一个充满钻石的钻石?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40005182/

相关文章:

matlab - 通过自动引入时间变量或以任何其他方式简化非常长的符号表达式

c# - 当在 C/C# 等中实现相同的滤波器/代码时,matlab IIR 滤波器会给出不同的输出

matlab - 如何在 MRI 图像中将头骨与大脑分割开

arrays - 从 Matlab 上的二进制文件中读取稀疏数组

javascript - JS矩阵乘法问题

string - 在 MATLAB 中,您可以将字符串视为列表中的一个对象吗?

c - C语言中如何通过指针访问矩阵数组的元素?

c++ - 不同模型的转换不起作用

r - 从方阵中删除总和为零的列以及相应的行

python - 保存前从 numpy 3D 矩阵中提取选定的列和行