2014-12-29 22 views
3

我想將一個MATLAB代碼轉換爲Python。Numpy/Scipy:它爲什麼會拋出錯誤

我的MATLAB代碼:

ASE_lamda1=1000e-9;   
ASE_lamda2=1100e-9;   
del_lamda= 2e-9;   
ASE_lamda = (ASE_lamda1:del_lamda: ASE_lamda2)'; 

下面是我想做的當量。 Python代碼:

#!/usr/bin/python 

import numpy as np 

ASE_lamda1 = 9.9999999999999995e-07 
ASE_lamda2 = 1100e-9 
del_lamda = 2e-9 
ASE_lamda = np.transpose(np.arange[ASE_lamda1:del_lamda:ASE_lamda2]) 

但我得到下面的錯誤:

Traceback (most recent call last): 
    File "tasks.py", line 22, in <module> 
    ASE_lamda = np.transpose(np.arange[ASE_lamda1:del_lamda:ASE_lamda2]) 
TypeError: 'builtin_function_or_method' object has no attribute '__getitem__' 

我不知道這個錯誤的 - 這意味着什麼,因爲我沒有過的Python/numpy的/ SciPy的很多專業知識。

+1

Python只在用於索引時識別'a:b:c'語法(在'[]'內部)。在那裏它將它轉換成一個「切片」對象('slice(a,b,c)')。 'np.arange(a,b,c)'更貼近MATLAB的用法。 – hpaulj

回答

2

np.arange[ASE_lamda1:del_lamda:ASE_lamda2] 

應該是

np.arange(ASE_lamda1, ASE_lamda2, del_lamda) 

這返回

array([ 1.00000000e-06, 1.00200000e-06, 1.00400000e-06, 
     1.00600000e-06, 1.00800000e-06, 1.01000000e-06, 
     ... 
     1.09000000e-06, 1.09200000e-06, 1.09400000e-06, 
     1.09600000e-06, 1.09800000e-06, 1.10000000e-06]) 

這是一維數組,所以調換它是一個空操作。您可能需要也可能不需要將其重塑爲2D,具體取決於您將如何處理它。一個簡單的方法重塑陣列2D使用切片和numpy.newaxis

In [54]: ASE_lamda[:, np.newaxis] 
Out[54]: 
array([[ 1.00000000e-06], 
     [ 1.00200000e-06], 
     ... 
     [ 1.09800000e-06], 
     [ 1.10000000e-06]]) 

In [55]: ASE_lamda[np.newaxis, :] 
Out[55]: 
array([[ 1.00000000e-06, 1.00200000e-06, 1.00400000e-06, 
      1.00600000e-06, 1.00800000e-06, 1.01000000e-06, 
      ... 
      1.09000000e-06, 1.09200000e-06, 1.09400000e-06, 
      1.09600000e-06, 1.09800000e-06, 1.10000000e-06]]) 

如果你從MATLAB移動到NumPy的,看看NumPy for Matlab Users

+0

非常感謝所有的信息和細節 – Prakash

相關問題