2013-08-16 5 views
2

유래,내가 복소수 함유 매트릭스가 복소수

으로 .CSV NumPy와 판독 (예를. -2.2982235934153075E-11 + 2.1179547211742553E-9i의) I는 NumPy와 배열 가져와야있다. 난 내 모든 다른, 실제 값을 구문 분석하는 genfromtext(file) 사용하고 있지만 모든 복잡한 값을 nan지고 있어요. 어떤 아이디어?

self.raw = (genfromtxt(self.loc, delimiter=',', skip_header=9, dtype=float)) 
[m,n] = shape(self.raw) 
data = zeros((m, n-3)) 
data[:, :] = self.raw[:, 3::] 

반환 :

data = array([nan, nan, nan, ...]) 
+0

는 사용하는 코드를 붙여 예시적인 입력을 붙여 (바람직하게는, 입력 파일의 일부) –

답변

1

내가 가진 결국 방법 이 작업을 수행하려면 원래 .csv 파일의 모든 셀에 대해 먼저 replace('i', 'j')을 입력하고 수정 된 새 파일을 저장하십시오. 그 후에 .csv를 dtype=str으로 읽으면 다음 계산에서 오류가 발생하지만 .csv 파일을 dtype=complex128으로 구문 분석하면 모든 문제가 해결됩니다. @ Saullo-Castro의 도움에 감사드립니다.

3

당신은 할 수 있습니다 : 텍스트 파일이 허수 부분을 표시하기 위해 i을 사용하고 있기 때문에 converters 매개 변수는 필수 것을

import numpy as np 
a = np.genfromtxt(filename, converters={0: lambda x: x.replace('i','j')}, 
        dtype=str) 
a = np.complex_(a) 

참고.

당신이 많은 열이 경우 복잡한 converters 논쟁을 피하고, 모든 ij에 의해 대체하는 외부 텍스트 파일을 변환하는 것이 더 쉬울 수 있습니다.

(-2.298223593415307508e-11+2.117954721174255306e-09j) 
(-2.298223593415307508e-11+2.117954721174255306e-09j) 
(-2.298223593415307508e-11+2.117954721174255306e-09j) 
(-2.298223593415307508e-11+2.117954721174255306e-09j) 
(-2.298223593415307508e-11+2.117954721174255306e-09j) 
(-2.298223593415307508e-11+2.117954721174255306e-09j) 
(-2.298223593415307508e-11+2.117954721174255306e-09j) 

만 사용하여 읽을 수 있습니다 : 허수와 TEXTFILE의 형식이 있다면

예를 들어

a = np.loadtxt(filename).view(complex) 

을 ...

+3

이는 단일 컬럼에 대해 작동한다. 데이터가 다중 열로 간주됩니다. 아마도 외부에서 sed, awk 또는 심지어 perl을 사용하여 데이터 파일에서 'i'-> 'j'를 변환하고 dtype = np.complex를 사용하여 변환 된 파일을 읽습니다. –

+0

외부로 변환 할 수 있다면 이 경우에는'converters' 인수를 사용할 필요가 없습니다 ... –

+1

맞습니다. 파일의 실제 열 수를 걱정할 필요가 없습니다. OP의 제약 사항이 무엇인지는 완전히 명확하지 않습니다. –

-1

genfromtxt(...)dtype='str' 인 문자열 배열로 csv 파일을 가져옵니다. 그런 다음 np.vectorize(...)을 사용하여 각 항목을 조작 할 수 있습니다. 한줄

import numpy as np 
from numpy import genfromtxt 

# import data as an array of strings using the dtype 
temp = genfromtxt('matlab_sim_Z.csv', delimiter=',',dtype='str') 

# perform elementwise conversion to complex numpers 
mapping = np.vectorize(lambda t:complex(t.replace('i','j'))) 
data = mapping(temp) 

:

data = np.vectorize(lambda t:complex(t.replace('i','j'))) (genfromtxt('matlab_sim_Z.csv', delimiter=',',dtype='str'))