" 'numpy.ndarray' object is not callable "的含义是什么?



我要创建一个数组k,维度为N X 1在MATLAB中我有

N = 2^15
dx = 0.1
k = [0:N/2-1 0 -N/2+1:-1]'*2*pi/(N*dx) 

在Python中,我可以创建一个数组1XN,但不能"翻转"它。(在MATLAB中,使用"’")。这是我的尝试:

N = 2**15
dx = 0.1
k = ( 2 * np.pi / (N * dx))*((np.arange(0, N/2-1),
np.array([0]),
np.arange(-N/2+1, -1))).reshape(1, N)

有时也会出现以下错误:

numpy。narray ' object是不可调用的

这是怎么回事?

我认为我(和其他人)解释了MATLAB矩阵总是2d,因此'翻转/转置可以将(1,n)矩阵更改为(N,1)。np.arange(...)生成1d数组,NOT一个2d的

把你的numpy表达式分成几个部分:

In [212]: k=((np.arange(0, N/2-1),
...:   np.array([0]),
...:   np.arange(-N/2+1, -1)))
In [213]: type(k)
Out[213]: tuple
In [214]: len(k)
Out[214]: 3
In [215]: [i.shape for i in k]
Out[215]: [(16383,), (1,), (16382,)]

你不能reshape一个元组。在

arange完全满足负启动值;不需要构建这个复杂的元组:

In [217]: n
Out[217]: 16384
In [218]: k=np.arange(-n+1, n-1)
In [219]: k.shape
Out[219]: (32766,)

你可以创建一个"column"(我必须在这里重复一遍):

In [220]: k[:,None].shape
Out[220]: (32766, 1)
In [221]: k.reshape(-1,1).shape
Out[221]: (32766, 1)

您的MATLAB表达式

>> k = [0:N/2-1 0 -N/2+1:-1]'*2*pi/(N*dx) ;
>> size(k)
ans =
32768       1

您可以通过简单地将它们并排放置来连接矩阵在比;大小((k, k))ans =

32768       2

在python中不起作用。在第一个表达式中,(.,..)生成一个元组,而不是一个更大的数组。arraysconcatenate等函数连接。在之前的回答中,我没有给你一个MATLAB差异页面的链接吗?

'callable'是function的泛化术语。在python中,函数是用func(args)调用的。MATLAB也这样做,但它也使用()进行索引。numpy数组可以被索引,但不能被视为函数。

相关内容