Numpy/Scipy:为什么会出现错误?

3

我可以帮您将MATLAB代码转换成Python。

我的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 对象 (slice(a,b,c))。np.arange(a,b,c) 更接近 MATLAB 的用法。 - hpaulj
1个回答

2

The

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来重塑数组:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接