我要创建一个数组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中不起作用。在第一个表达式中,(.,..)
生成一个元组,而不是一个更大的数组。arrays
与concatenate
等函数连接。在之前的回答中,我没有给你一个MATLAB差异页面的链接吗?
'callable'是function
的泛化术语。在python中,函数是用func(args)
调用的。MATLAB也这样做,但它也使用()进行索引。numpy数组可以被索引,但不能被视为函数。