나의 출발점은 NumPy와의 기능 loadtxt에 문제가 있었다. 나는 그것을 봤고 this question on StackOverflow에왔다. 파이썬 MemoryError의 또는 ValueError를 np.loadtxt 및 iter_loadtxt이
> data = data.reshape((-1, iter_loadtext.rowlength))
> ValueError: total size of new array must be unchanged
가 그럼이 코드 행의 수와 COLS의 최대 수를 추가하려고 : 즉, 다음과 같은 솔루션 주었다
def iter_loadtxt(filename, delimiter=',', skiprows=0, dtype=float):
def iter_func():
with open(filename, 'r') as infile:
for _ in range(skiprows):
next(infile)
for line in infile:
line = line.rstrip().split(delimiter)
for item in line:
yield dtype(item)
iter_loadtxt.rowlength = len(line)
data = np.fromiter(iter_func(), dtype=dtype)
data = data.reshape((-1, iter_loadtxt.rowlength))
return data
data = iter_loadtxt('your_file.ext')
그래서 내가 그 시도를하지만 다음과 같은 오류 메시지가 발생
num_rows = 0
max_cols = 0
with open(filename, 'r') as infile:
for line in infile:
num_rows += 1
tmp = line.split(",")
if len(tmp) > max_cols:
max_cols = len(tmp)
def iter_func():
#didn't change
data = np.fromiter(iter_func(), dtype=dtype, count=num_rows)
data = data.reshape((num_rows, max_cols))
하지만 그것은해야한다고 생각하지만이 여전히 같은 오류 메시지가 준 : 나는 부분적으로 from another question있어 부분적으로 자신을 썼다 여기 아래 코드 조각과 해결되었습니다. 반면에 나는 data.reshape(..)
을 올바른 방식으로 호출하는지 확신 할 수 없다.
나는 어떤 일이 일어 났는지 보려면 date.reshape(..)
이 호출 된 규칙에 주석을 달았습니다.
> ValueError: need more than 1 value to unpack
뭔가 X
,이 문제에 관한 모든 변수와 함께 수행되는 경우 첫 번째 점에서 일어난 : 즉,이 오류 메시지를 주었다.
이 코드는 내가 사용하는 입력 파일에서 작동 할 수 있음을 알고 있습니다. 그러나 나는 왜 내가이 문제를 해결할 수 없는지 알 수 없다. 32 비트 Python 버전 (64 비트 Windows 시스템)을 사용하고 있기 때문에 다른 컴퓨터에서 발생하지 않는 메모리 문제가 발생합니다. 그러나 나는 확실하지 않다. 정보를 위해 : 나는 1.2GB 파일을 위해 8GB의 RAM을 가지고있다. 그러나 나의 RAM은 작업 관리자에 따라 가득 차 있지 않다.
내가 해결하고 싶은 것은 오픈 소스 코드를 사용하여 주어진 파일을 읽고 구문 분석해야한다는 것입니다.하지만 내 메모리 내에서는 np.loadtxt(filename, delimiter=",")
과 같습니다. 나는 MacOsx와 Linux에서 원래 작동했던 코드를 알고 있고, 더 정확하게 말하면 : "MacOsx 10.9.2와 Linux (버전 2.6.18-194.26.1.el5 ([email protected]) (gcc 버전 4.1.2 20080704 (Red Hat 4.1.2-48)) 1 SMP Tue Nov 9 12:46:16 EST 2010). "
시간에 대해서는별로 신경 쓰지 않습니다. 내 파일에는 100 또는 1000 (입력 파일에 따라 하나는 항상 100, 항상 하나는 1000) 항목이 한 줄에 -200.000 줄 포함되어 있습니다. 한 항목은 음수가 아닌 3 자리가있는 부동 소수점이고 그들은 ,
과 공백으로 구분됩니다. 예 : [..] 0.194, -0.007, 0.004, 0.243, [..]
및 100 개 또는 100 개의 항목 중 4 개는 + -200.000 줄입니다.
저는 오픈 소스 코드가 필요하기 때문에 파이썬 2.7을 사용하고 있습니다.
해결 방법이 있습니까? 미리 감사드립니다.
'reshape'를 올바른 방법으로 사용하고 있습니다. 그러나'count = num_rows'는 버그이며 두 번째 코드에서 오류가 발생합니다. 그것은 총 값이어야합니다. 그래서'count = num_rows * num_cols'. –
감사합니다. 하지만 이제'X = np.asfortranarray (X, [..])'에 MemoryError가 생겼습니다. dtype은'iter_loadtxt'에서 사용하는 것과 같습니다. 그것은 내 기계가 프로세스에 줄 수있는 RAM의 끝이 아닌 메모리의 -700mb에서 멈 춥니 다 ... – Renzeee
OK. 다음 문제는 연속적인 * 메모리 주소가 부족하다는 것입니다. 솔직히 64 비트 OS에서 32 비트 프로세스가 어떻게 작동하는지 모르겠습니다. 여하튼, 가장 쉬운 해결책은 64 비트 Python을 얻는 것입니다. 어쩌면 [WinPython '] (http://winpython.sourceforge.net/)은 64 비트와 이식성이 뛰어 나기 때문에 좋습니다. –