如何将向量转换成矩阵

时间:2019-04-08 18:18:31

标签: matlab matrix vector

我在制作矩阵时遇到问题。 我有一个数组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

3 个答案:

答案 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=30b=50,{{ 1}}),相比嵌套循环的0.0141(3次试验的平均值),此实现花费0.004秒。稀疏的实现还可以随着问题的扩展而节省空间(假设矩阵保持稀疏)

编辑: 关于可伸缩性的另一种说法是强调实现之间的差异,如果出于某种原因使用嵌套的for循环,则需要声明矩阵变量并预分配空间,即dl_boku=25只是为了好玩,我尝试运行嵌套有dim=1000matrix = zeros(dim);a=300b=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循环将为您完成此操作。