0

我正在尝试基于两个 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 向量,并且由于向量不一样,我得到了一个不匹配错误。

4

2 回答 2

0

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

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

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

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

result = reshape(v1, 64, 64);

此外,我相信您的循环逻辑确实在不止一个地方被打破:

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

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

result = zeros(size(v1));
for k = 1:numel(v1),
    result(k) = v1(k) + 0.05 * v2(k);
end
于 2013-05-11T23:14:54.740 回答
0
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 矩阵。

于 2013-05-11T23:18:02.863 回答