numpy 麻木/刺痛:为什么会抛出错误

jv2fixgn  于 2023-01-13  发布在  其他
关注(0)|答案(1)|浏览(110)

我正在尝试将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没有太多的专业知识。

mwkjh3gx

mwkjh3gx1#

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])

这是一个1D数组,所以转置它是一个空操作。你可能需要也可能不需要将它重新整形为2D,这取决于你要对它做什么。一个简单的方法是使用切片和numpy.newaxis将数组重新整形为2D:

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

相关问题