我有一个3D矩阵:
A = [5 7 8; 0 1 9; 4 3 6];
A(:,:,2) = [1 0 4; 3 5 6; 9 8 7]
我想使用1D FFT的分解在该矩阵中应用3D FFT。我读到它应该在每个维度上应用1D FFT。
我该怎么做?
对于x和y,我这样做:
for k=0:2
y1 = A(:,k+1,:);
A(:,k+1,:) = fft(y1);
end
for k=0:2
y2 = A(k+1,:,:);
A(k+1,:,:) = fft(y2);
end
对于维度z,我不知道如何做到这一点。
答案 0 :(得分:1)
fft
函数接受第三个输入指定维度,并相对于其他维度进行矢量化。所以你可以简单地使用:
result = fft(fft(fft(A, [], 1), [], 2), [], 3);
答案 1 :(得分:0)
首先,您的循环应如下所示:
Dim foundData as Boolean
Set tables = ie.document.getElementsByTagName("Table")
For x = 0 to tables.Length Step 1
'You may need to use innerText or inner/outerHTML to find the text
If tables(x).innerText Like "*TEXT IN TABLE*" Then
'Table found, Copy the Data
Set Clipboard = New MSForms.DataObject
Clipboard.SetText tables(x).outerHTML
Clipboard.PutInClipboard
Worksheets("temp").Cells(1, 1).PasteSpecial
foundData = True
Exit For 'Exit Loop since the data was found
End If
Next x
'Check if data was found after leaving the loop
If foundData <> True Then
MsgBox "The Data Was Not Found on Any Tables"
End If
第二次,上面的循环是相同的(如@Luis Mendo在他的回答中所说):
for k=1:size(A,2)
y = A(:,k,:);
A(:,k,:) = fft(y);
end
根本不需要编写循环。
第三,要计算沿第三维的1D FFT,您可以使用:
A = fft(A,[],2);
你可以将其作为一个循环来写(只是为了回答你的明确问题,我不建议你这样做):
fft(A,[],3);
如果出于某种原因,由于for k=1:size(A,3)
y = A(:,:,k);
A(:,:,k) = fft(y);
end
的形状,在您的MATLAB版本中不起作用,您可以将y
重新塑造为列向量:
y
最后,要使用1D分解计算3D FFT,您只需编写
... fft(y(:));
这遵循您尝试实施的完全相同的过程,但它的速度要快得多。