- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
亲爱的 stackoverflow 社区!
今天我发现在高端集群架构上,尺寸为 1921 x 512 x 512 的 2 个立方体的元素乘法大约需要 27 秒。这太长了,因为在当前实现中,我必须执行至少 256 次这样的计算才能对功率谱进行方位平均。我发现性能缓慢主要是由于不同的步幅结构(一种情况是 C,另一种情况是 FORTRAN)。两个数组之一是新生成的 bool 网格(C 顺序),另一个(FORTRAN 顺序)来自 3D numpy.fft.fftn()输入网格的傅立叶变换(C 阶)。除了反转轴(这只是一个解决方法)之外,numpy.fft.fftn() 改变步幅和如何防止这种情况的想法有什么原因吗?通过类似的步幅(FT 网格的 ndarray.copy()),可以实现约 4 秒,这是一个巨大的进步。
因此问题如下:
考虑数组:
ran = np.random.rand(1921, 512, 512)
ran.strides
(2097152, 4096, 8)
a = np.fft.fftn(ran)
a.strides
(16, 30736, 15736832)
正如我们所看到的,步幅结构是不同的。如何防止这种情况(不使用 a = np.fft.fftn(ran,axes = (1,0)))?是否还有其他可能影响步幅结构的 numpy 数组例程?在这些情况下可以做什么?
像往常一样,我们非常感谢有用的建议!
最佳答案
您可以使用 scipy.fftpack.fftn (也如 hpaulj 所建议的那样)而不是 numpy.fft.fftn,看起来它正在做您想要的事情。然而它的性能稍差:
import numpy as np
import scipy.fftpack
ran = np.random.rand(192, 51, 51) # not much memory on my laptop
a = np.fft.fftn(ran)
b = scipy.fftpack.fftn(ran)
ran.strides
(20808, 408, 8)
a.strides
(16, 3072, 156672)
b.strides
(41616, 816, 16)
timeit -n 100 np.fft.fftn(ran)
100 loops, best of 3: 37.3 ms per loop
timeit -n 100 scipy.fftpack.fftn(ran)
100 loops, best of 3: 41.3 ms per loop
关于Python numpy.fft 改变步幅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40109915/
我不确定哪种结构布局最适合我的应用程序:共享、打包、std140、std430。我并不是要求对每个信息进行解释,这些信息很容易找到,只是很难弄清楚每个信息对供应商兼容性/性能的影响。如果 shared
如何在 Swift 中获取特定数字类型的最小值(跨度)?我的意思是,最短的非零步幅。例如 1 代表 Int,0.00...001 代表 Double 等... 最佳答案 这已经在单独的评论中得到了部分
有没有办法告诉 numpy 在写入 python pickle 文件时保留非标准步幅? >>> # Create an array with non-standard striding >>> x =
我将图像存储为 2d numpy 数组(可能是多维)。 我可以在那个反射(reflect)二维滑动窗口的数组上创建一个 View ,但是当我 reshape 它以使每一行都是一个扁平化的窗口(行是窗口
我是一名优秀的程序员,十分优秀!