Matlab 如何将向量转换为矩阵
我在制作矩阵方面有问题。 我有一个10x10的阵列和两个图形:a和b(3和5)。 这是我的正方形的第一个点(大小为5x5)。 我将在向量上用“1”标记正方形 我想要这样的东西:Matlab 如何将向量转换为矩阵,matlab,matrix,vector,Matlab,Matrix,Vector,我在制作矩阵方面有问题。 我有一个10x10的阵列和两个图形:a和b(3和5)。 这是我的正方形的第一个点(大小为5x5)。 我将在向量上用“1”标记正方形 我想要这样的东西: [0000000000 0000000000 0000000000 0000000000 0011111000 0011111000 0011111000 0011111000 0011111000 0000000000] z=zeros(1,10) result_matrix=[z;z;z;z;x;
[0000000000
0000000000
0000000000
0000000000
0011111000
0011111000
0011111000
0011111000
0011111000
0000000000]
z=zeros(1,10)
result_matrix=[z;z;z;z;x;x;x;x;x;z]
我应该如何将点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
a=3;%x
b=5;%Y
i=0;
j=0;
dl_boku=5;
%方格
对于i=1:10
if(ia+(dl_-boku-1))
x(i)=0;
其他的
x(i)=1;
终止
终止
对于i=1:10
如果(ib+(dl_-boku-1))
y(i)=0;
其他的
y(i)=1;
终止
终止
因此,最后从这段代码中,您有两个向量:
x =
0 0 1 1 1 1 1 0 0 0
y =
0 0 0 0 1 1 1 1 1 0
要获得你在问题中给出的矩阵,你只需要x
和额外的零向量
。所以它看起来是这样的:
[0000000000
0000000000
0000000000
0000000000
0011111000
0011111000
0011111000
0011111000
0011111000
0000000000]
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
如果希望代码自动生成矩阵,可以使用嵌套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循环将为您进行初始化。在MATLAB中有很多方法可以实现这一点,哪种方法最好取决于网格的大小和稀疏程度。我将提供以下解决方案:
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);
就问题的大小而言,嵌套For循环的速度差不多一样快,但随着问题的扩大(例如,a=30
,b=50
,dl_boku=25
,dim=1000
),该实现需要0.004秒,而嵌套For循环则需要0.0141秒(3次试验的平均值)。稀疏实现还将随着问题的扩展而节省空间(假设矩阵保持稀疏)
编辑:
关于可伸缩性的另一个说法是为了强调实现之间的差异,如果出于任何原因使用嵌套for循环,那么声明矩阵变量并预先分配空间是值得的,即matrix=zero(dim)代码>只是为了好玩,我试着用a=300
,b=500
,dl_boku=250
,dim=5000
运行嵌套for循环。。。在没有预分配的情况下,运行需要66秒。对于预分配,0.35秒。对于本例,稀疏实现采用0.003。就空间而言,在本例中,稀疏实现使用1040008字节,而完整矩阵需要200000000字节