我在制作矩阵时遇到问题。 我有一个数组10x10和2个数字:a和b(3和5)。 这是我的正方形(尺寸为5x5)的第一个点。 我将在矢量上用“ 1”标记我的正方形。
我想要这样的东西:
[0000000000
0000000000
0000000000
0000000000
0011111000
0011111000
0011111000
0011111000
0011111000
0000000000]
我应如何将点x(i)和y(i)放入矩阵中? 我将非常感谢您的帮助。 我写了简单的代码,现在我不知道如何用它来制作矩阵。
a=3; %x
b=5; %y
i=0;
j=0;
dl_boku = 5;
%square
for i=1:10
if (i < a) || (i > a + (dl_boku - 1))
x(i) = 0;
else
x(i) = 1;
end
end
for i=1:10
if (i < b) || (i > b + (dl_boku - 1))
y(i) = 0;
else
y(i) = 1;
end
end
答案 0 :(得分:1)
在MATLAB中有很多方法可以做到这一点,而最好的方法取决于网格的大小及其稀疏程度。我将提供此解决方案:
MyType _myType = someDictionary[1]
_myType.SomeVal1 will be equal to "foo"
对于问题的大小,嵌套的for循环差不多快,但是随着问题的扩大(例如a = 3;
b = 5;
dl_boku = 5;
dim = 10; % The size of your grid
[Y,X] = meshgrid(a:a+dl_boku-1,b:b+dl_boku-1); % Get indices of the 1's
matrix = sparse(X,Y,1,dim,dim);
,a=30
,b=50
,{{ 1}}),相比嵌套循环的0.0141(3次试验的平均值),此实现花费0.004秒。稀疏的实现还可以随着问题的扩展而节省空间(假设矩阵保持稀疏)
编辑:
关于可伸缩性的另一种说法是强调实现之间的差异,如果出于某种原因使用嵌套的for循环,则需要声明矩阵变量并预分配空间,即dl_boku=25
只是为了好玩,我尝试运行嵌套有dim=1000
,matrix = zeros(dim);
,a=300
,b=500
的循环...而没有预先分配,则运行了66秒。预先分配0.35秒。在此示例中,稀疏实现花费0.003。就空间而言,在此示例中,稀疏实现使用1040008字节,而完整矩阵需要200000000字节。
答案 1 :(得分:0)
所以最终从这段代码中,您有了两个向量:
x =
0 0 1 1 1 1 1 0 0 0
y =
0 0 0 0 1 1 1 1 1 0
要获取问题中提出的矩阵,只需x
和附加向量zeros
。因此它将如下所示:
z=zeros(1,10)
result_matrix=[z;z;z;z;x;x;x;x;x;z]
然后您有了矩阵:
result_matrix =
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 0 0 0
0 0 1 1 1 1 1 0 0 0
0 0 1 1 1 1 1 0 0 0
0 0 1 1 1 1 1 0 0 0
0 0 1 1 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0
答案 2 :(得分:0)
如果您希望代码自动生成矩阵,则可以使用嵌套的for循环,如下所示:
a = 3;
b = 5;
dl_boku = 5;
for i = 1:10
for j = 1:10
if lt(j,a) || gt(j,a+(dl_boku-1)) || lt(i,b) || gt(i,b+(dl_boku-1))
matrix(i,j) = 0;
else
matrix(i,j) = 1;
end
end
end
在这里,您不必初始化i或j,因为for循环将为您完成此操作。