Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何将向量转换为矩阵_Matlab_Matrix_Vector - Fatal编程技术网

Matlab 如何将向量转换为矩阵

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;

我在制作矩阵方面有问题。 我有一个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;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字节