0
私の結果にnumpyの配列を割り当てるcdefでは、次のエラーが発生します。Cython MemoryError
---> 56 cdef np.ndarray[DTYPE_t, ndim=2] alignpmf = np.zeros([bin_len, out_len*bin_len],dtype=float)
MemoryError:
関連するコードは次のとおりです。
from __future__ import division
import numpy as np
cimport numpy as np
cimport cython
DTYPE = np.int
DTYPE_f = np.float
ctypedef np.float_t DTYPE_t
ctypedef np.int_t DTYPE_i
...
@cython.boundscheck(False)
@cython.wraparound(False)
def full_pmfs(np.ndarray[DTYPE_i, ndim=2] align, np.ndarray[DTYPE_i, ndim=1] bins):
assert align.dtype == DTYPE
assert bins.dtype == DTYPE
cdef int loop_ind_i, loop_ind_j, inner_count, inner_count_start, inner_count_stop
cdef int bin_len = bins.shape[0]
cdef int i_start_ind, i_stop_ind
cdef int seqs = align.shape[0]
cdef int residues = align.shape[1]
cdef int size = residues * bin_len
cdef int out_len = residues**2 - residues // 2)
cdef np.ndarray[DTYPE_t, ndim=2] alignpmf = np.zeros([bin_len,
out_len*bin_len],dtype=float)
...
エラーの原因を上の任意の手がかり?私はPythonで同じコードを書く場合私はメモリエラーを取得しません。私が純粋なnumpyまたはcythonコードを実行すると、私のRAM(このボックスの12GB)はほとんど消費されません。参考までに、bin_lenは約20で、out_lenは80,000かもしれません。あなたのコードの末尾を削除した後に「)」(あなたは残基を計算// - 私は、エラーを再構築することができませんでした
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
import numpy
ext_modules = [Extension("mi", ["mi.pyx"])]
setup(
name = 'MI calcs',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules,
include_dirs = [numpy.get_include(),],
)
bin_lenとout_lenはあなたが思っている値ですか?前にprintステートメントを挿入することはできますか? – tillsten