2017-04-25 1 views
0

파이썬 코드를 사용하여 numpy를 사용하여 계산을합니다. 내 코드에서 정수 변수 'N'을 색인으로 사용합니다.파이썬 (numpy)과 Matlab 사이의 정수 변환

그때 내 matlab에 (2017a) 코드에서이 인덱스를 사용하는 scipy.io.savemat를 사용하고, 그런 일 할 때 나는이 오류가 발생합니다 :

% N is the int variable I have from my python code 
>> N 
N = 
    int64 
    1792 
>> (1:2)/N 
Error using/
Integers can only be combined with integers of the same class, or scalar doubles. 

분명히 매트랩 "기본 정수"에 있습니다 클래스 'double'. 내 말은 :

>> N=3 
N = 
    3 
>> class(N) 
ans = 
    'double' 

위의 코드를 수행하는 데 문제가 없을 것이라고 MATLAB 코드에서 'N'을 지정해야합니다. 하지만 난 파이썬에서 내 변수를 할당 후 matlab에 그들을 변환합니다. NumPy와 경고를 내 파이썬 코드 결과에 'N'에 대한 numpy.double를 사용하려고 예 :

>>> N = numpy.double(100) 
>>> numpy.zeros(N) 
VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future 

그것을 요약하면, 나는대로 다음, 내 파이썬 코드에서 정수로 'N'사용하려면 두 번 (또는 네이티브 MATLAB 정수로 작동) 내 MATLAB 코드에서. savemat는 나를 위해이 변환을 수행 할 것이라고 생각했지만 다른 좋은 이유로는 그렇지 않습니다.

명백한 해결 방법은 직렬화 이전 또는 이후에 정수를 double로 변환하는 것입니다. 하지만 많은 변수가있는 거대한 사전이 있기 때문에 각각의 유형을 추적해야하므로 필자는이를 피하고 싶습니다. 나는 더 간단한 "네이티브"솔루션을 찾고 있습니다.

이 문제를 어떻게 해결할 것이라고 제안 하시겠습니까? 덕분에

내가 NumPy와의 일부 값을 저장하고, 옥타브로로드 시도 내 댓글에 후속으로
+0

는'np.double (100)'float를 생산 떠 가져온 값을 변환하기 위해 노력하고 있습니다. 그래서'np.zeros'는 그것을 좋아하지 않습니다. 사용하지만 경고합니다. 파이썬에서'N' 정수를 유지하는 방법은 파일에'float (N)'으로 저장하는 방법입니다. 나는 MATLAB이 아니라 Octave를 가지고 있으므로 이것을 테스트 할 수 없을 수도 있습니다. – hpaulj

+0

고마워요 @ hpaulj, 당신의 솔루션은 파이썬에서 matlab로 변환 해요 내 거대한 사전에 내 유형을 추적해야합니다. 너는 내가 내 질문에 그것에 대해 분명하지 않다는 것이다. 수정 한 항목을 업데이트했습니다. 확인해주세요. – nivniv

답변

0

:

옥타브에서
In [552]: from scipy import io 
In [553]: io.savemat('test.mat',dict(N=100, fN=float(100),x=np.arange(100))) 

>> load test.mat 
>> (1:2)/N 
ans = 
    0 0 

>> (1:2)/fN 
ans = 
    0.010000 0.020000 

>> (1:2)/100 
ans = 
    0.010000 0.020000 
>> M=100 
M = 100 
>> whos 
Variables in the current scope: 

    Attr Name  Size      Bytes Class 
    ==== ====  ====      ===== ===== 
     M   1x1       8 double 
     N   1x1       4 int32 
     ans   1x2       16 double 
     fN   1x1       8 double 
     x   1x100      400 int32 

그래서 그래, Python 번호 (및 배열을) 절약 수레는 MATLAB/Octave에서 그 값을 쓰는 데 가장 가까운 것입니다.

>> (1:2)/double(N) 
ans = 
    0.010000 0.020000