我正在尝试将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的专业知识。
答案 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。