【问题标题】:Python: SciPy DCT does not work on large matricesPython:SciPy DCT 不适用于大型矩阵
【发布时间】:2021-06-20 04:21:49
【问题描述】:

我需要计算一个大矩阵的 DCT。我的代码似乎适用于较小的矩阵,但对于大小为 50000 x 50000 的矩阵会引发以下错误:

error: (n>0&&n<=size(x)) failed for the 1st keyword n: ddct2:n=50000
import numpy as np
from scipy import fftpack

# this works fine
y = fftpack.dct(np.random.normal(size = (1000,1000)))
# this throws an error
z = fftpack.dct(np.random.normal(size = (50000,50000)))

如何解决这个问题?非常感谢。

【问题讨论】:

  • 我相信问题出在内存分配上。需要为 numpy 数组分配内存。

标签: python scipy fft large-data dct


【解决方案1】:

使用scipy.fft(不是fftpack)似乎对我有用:

import numpy as np
import scipy.fft as fft

x = np.random.normal(size=(50000,50000))
y = fft.dct(x)

但请注意,大小为 50000 的方形 ndarray 需要超过 20 GB。您可能会遇到一次性处理这么多数据的问题。

版本说明:Python 3.9.2、NumPy 1.19.3、SciPy 1.6.1

【讨论】:

  • 谢谢!在 Spyder 中,'from scipy import fft' 对我不起作用,因为它与 numpy 函数 numpy.fft 混淆了。例如,我会输入 fft.dct,它会给我'错误:函数对象没有属性'dct''。你知道如何解决这个问题吗?
  • 对不起,我从未使用过 Spyder。也许试试import scipy.fft as scfft,然后打电话给scfft.dct
  • 最后解决了。真的很愚蠢,我只需要在他们解决这个问题的地方获得更新版本的 numpy。非常感谢所有的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多