Numpy / Scipy:为什么它会抛出错误

时间:2014-12-29 05:38:37

标签: python matlab numpy range multidimensional-array

我正在尝试将MATLAB代码转换为Python。

我的MATLAB代码:

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

以下是我作为eqv尝试的内容。 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 个答案:

答案 0 :(得分: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