【问题标题】:Matlab vector assistanceMatlab 向量辅助
【发布时间】:2013-05-12 15:51:39
【问题描述】:

我正在尝试基于两个 64x64 双向量在 matlab 中创建一个列向量,并遍历向量中的每个元素并应用一个方程来创建一个新向量,然后将其应用。这是我的代码

for i=1:4096,

vector1 = v1(:); %instead of copying the vector this created a 4096X1 double rather than 64X64 for some reason, same with vector2
vector2 = v1(:);
vector1(i) = vector1(i) + 0.05*vector2(i); %for each element in vector1 apply equation to update values.
end
v1(:) = vector1(:); % replace v1 with the new vector1 created on the equation applied 

据我所知,这应该可以工作,但是不是创建一个 64*64 向量,而是创建了一个 1*4096 向量,并且由于向量不同,我收到了不匹配错误。

【问题讨论】:

    标签: matlab function vector multiple-columns


    【解决方案1】:

    结果向量是一个列向量,因为这是linear indexing 的输出(仅使用一个下标进行索引)。还值得注意的是,向列向量的转换是多余的,线性索引隐含地做到了这一点。

    如果您希望最终结果为 64x64 矩阵,请以适当的大小初始化结果数组:

    result = zeros(size(v1)); %// Same dimensions as v1, i.e 64-by-64
    

    并让 MATLAB 自动将线性索引转换为结果矩阵中的相应位置。或者,您可以使用reshape,例如:

    result = reshape(v1, 64, 64);
    

    另外,我相信你的循环逻辑确实不止一处被破坏:

    1. 您将在每次迭代中覆盖vector1vector2 的值。将它们的初始化行放在循环之前
    2. 您将错误的值分配给vector2...不应该是vector = v2(:) 或其他什么吗?

    最后的循环应该是这样的:

    result = zeros(size(v1));
    for k = 1:numel(v1),
        result(k) = v1(k) + 0.05 * v2(k);
    end
    

    【讨论】:

    • 是的,我同意你的方法更简单,但是,出于某种原因,它必须使用迭代来完成。 v2 值确实在这里写错了,至于向量它出于某种原因创建了 1*4096 向量而不是 64*64
    【解决方案2】:
    vector1 = v1;
    for i=1:64
        for j = 1:64
            vector1(i, j) = vector1(i, j) + 0.05*v1(i, j);
        end
    end
    v1 = vector1;     % or v1 = vector1(:, :); if you prefer
    

    这个过程不需要vector2矩阵。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-08
      • 2022-08-19
      • 2014-04-26
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      相关资源
      最近更新 更多