对于正向(多维)FFTW算法,可以指定输入var selectedItems = [IndexPath]()
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let firstIndexPath = selectedItems.first{
//If the section with the first element selected and the new selection are not equals, display your message
if indexPath.section != firstIndexPath.section{
let alert = UIAlertController(title: "Warning", message: "Message", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: {
a in
self.selectIndexPath(indexPath: indexPath, isSelected: false)
}))
//You can put it here if you prefer not wait for the closure for realize the deselection
//self.selectIndexPath(indexPath: indexPath, isSelected: false)
self.present(alert, animated: true, completion: nil)
return
}
self.selectIndexPath(indexPath: indexPath, isSelected: true)
}else{
self.selectIndexPath(indexPath: indexPath, isSelected: true)
}
}
func selectIndexPath(indexPath: IndexPath, isSelected: Bool){
tableView.cellForRow(at: indexPath)?.accessoryType = isSelected ? .checkmark : .none
if isSelected{
selectedItems.append(indexPath)
}else{
selectedItems.removeAll(where: {$0 == indexPath})
tableView.deselectRow(at: indexPath, animated: true)
}
let section = sections[indexPath.section]
let item = section.items[indexPath.row]
// for all selected rows assuming tableView.allowsMultipleSelection = true
}
为实数,并且输出应为复数。这是在创建numpy.ndarray
的参数中的字节对齐数组时完成的:
fft_object
输出阵列不对称,第二个轴被截断到正频率。对于复杂的FFT,您可以使用以下import numpy as np
import pyfftw
N = 256 # Input array size (preferrably 2^{a}*3^{b}*5^{c}*7^{d}*11^{e}*13^{f}, (e+f = 0,1))
dx = 0.1 # Spacing between mesh points
a = pyfftw.empty_aligned((N, N), dtype='float64')
b = pyfftw.empty_aligned((N, N//2+1), dtype='complex128')
fft_object = pyfftw.FFTW(a, b, axes=(0, 1), direction='FFTW_FORWARD')
np.ndarray
在截断的情况下将如何处理?我考虑过使用:
kx, ky = np.meshgrid(np.fft.fftfreq(N, dx), np.fft.fftfreq(N, dx)) # Wave vector components
k2 = -4*np.pi**2*(kx*kx+ky*ky) # np.ndarray for the Laplacian operator in "frequency space"
但是,这真的有效吗?似乎正在忽略“ y”方向上的负频率。
答案 0 :(得分:1)
我对pyfftw
不熟悉,但是使用numpy.fft
模块可以正常工作(假设您使用注释中提到的rfftfreq
)。
回顾一下:对于实数组a
,傅立叶变换b
具有类似Hermtian的属性:b(-kx,-ky)
是b(kx,ky)
的复共轭。
正向fft的实际版本通过省略负ky
来丢弃(大部分)冗余信息。向后fft的实际版本假定可以通过复杂地结合适当的元素来找到丢失频率处的值。
如果您使用了复杂的fft并保留了所有频率,则-k2 * b
仍将具有类似于Hermitian的属性。因此,实际向后fft所做的假设仍然成立,并将给出正确的答案。
我猜想pyfftw
可以很好地工作,只要您为float64
情况下的输出指定正确大小的direction=FFT_BACKWARD
数组即可。