【问题标题】:Numpy / Scipy : why it is throwing errorNumpy / Scipy:为什么会抛出错误
【发布时间】:2015-02-25 08:19:39
【问题描述】:

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

【问题讨论】:

  • Python 仅在用于索引时识别a:b:c 语法(在[] 内)。在那里它将它转换为slice 对象(slice(a,b,c))。 np.arange(a,b,c) 更接近 MATLAB 的用法。

标签: python matlab numpy range multidimensional-array


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 2019-06-13
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多