matlab - 对矩阵执行平滑函数,但现在只有匹配的索引给出值
问题描述
我有一个 1000x1000x50 的矩阵,我在循环中沿第三维对每个向量执行了一个函数(1,000,000 个向量,50 个元素长)。当我尝试查看 m=n 的任何特定元素时,即 (1000,1000,40) ,将显示一个非零值。但是,当我尝试查看 m =/= n 的元素时,即 (1000,1001,40),只返回 0。我知道 (1001,1001,40) 具有非零值,并且我知道原始矩阵在 (1000,1001,40) 处具有非零元素。
这是我使用的循环:
mymatrix_new = zeros(size(mymatrix));
for i=1:length(mymatrix)
mymatrix_new(i,i,:) = wdenoise(squeeze(mymatrix(i,i,:)));
end
对于 DO 显示的值,结果是我所期望的——一个平滑的信号。我只是不明白为什么当 m 和 n 索引不相同时某些非零元素显示为零。
解决方案
您只迭代和更新具有 m == n 的单元格。发生这种情况是因为您使用了一个 for 循环。所有其他值都不会被访问并且永远不会更新,这就是它们保持为零的原因。
如果你看看你的 for 循环:
for i=1:length(mymatrix)
在第一次迭代中 i = 1 它将更新:
mymatrix_new(1,1,:) = wdenoise(squeeze(mymatrix(1,1,:)));
在第二次迭代中 i = 2 它将更新:
mymatrix_new(2,2,:) = wdenoise(squeeze(mymatrix(2,2,:)));
如您所见,您永远不会更新 mymatrix_new(1, 2) 或除具有 m == n == i 的单元格以外的任何单元格
您需要使用两个嵌套的 for 循环,以便更新i
和的所有组合j
mymatrix_new = zeros(size(mymatrix));
for i=1:length(mymatrix)
for j=1:length(mymatrix) % Here it assumes the matrix is a square
mymatrix_new(i,j,:) = wdenoise(squeeze(mymatrix(i,j,:)));
end
end
推荐阅读
- python - 使用 CNN 进行图像匹配
- c# - HtmlAgilityPack 解析 Web 数据以在 Android C# 中选择第二个属性
- asp.net-mvc - mvc局部视图中的编译错误
- sql - 如何在 Sql Server 2008 中将 DD-MM-YYYY HH:MM:SS(24 小时格式)转换为 DD-MMM-YYYY HH:MM:SS(24 小时格式)?
- css - 如何动态输入背景图片的位置?
- scala - 拆分后最多选择一行中的前3个元素
- angularjs - 在 AngularJS 中访问 DataTable 的默认搜索框
- android - Android中的警报延迟
- c - 如何将“类型”作为参数传递给 c 中的函数?
- python-2.7 - ImportError:scrapy python 2.7.13 中没有名为 wx 的模块?