我正在尝试将Matlab代码转换为Python,但在转换以下行时会出错:
Matlab代码
md(1,index) = (-1)^bits(m);
Python等价物
md[index]=(-1)**bits(m)
错误
md[index]=(-1)**bits(m)
TypeError: 'numpy.ndarray' object is not callable
Matlab代码
fdel=2;
fn=10;
zeta=1/sqrt(2);
spb=100;
npts=2000;
fs=2000;
freq_in = zeros(1,2000); % initialize input frequency array
phi_in = zeros(1,2000); % initialize input phase array
t = (0:(npts-1))/fs; % generate vector of sample times
nsettle = fix(npts/10); % set settle time as 0.1*npts
tsettle = nsettle/fs; % set settle time
%
% % The following three lines of code generate the arrays of the
% % input frequency and input phase.
%
phin1 = 2*pi*fdel*(t-tsettle);
freq_in = [zeros(1,nsettle),fdel*ones(1,npts-nsettle)];
phi_in = [zeros(1,nsettle),phin1(1,(nsettle+1):npts)];
%
% % Generate the QPSK input signal and input signal.
%
nbits = npts/spb; % Determine number of bits
md = zeros(1,nbits*spb);
bits = round(rand(1,nbits));
for m=1:nbits
for n=1:spb
index = (m-1)*spb + n;
% error making line
md(1,index) = (-1)^bits(m);
end
end
Python代码
fdel=2
fn=10
zeta=1/sqrt(2)
spb=100
npts=2000
fs=2000
freq_in=zeros(2000)
phi_in=zeros(2000)
t=(arange(0,npts-1))/fs
nsettle=fix(npts/10)
tsettle=nsettle/fs
phin1=2*pi*fdel*(t-tsettle)
freq_in=array([zeros(nsettle),fdel*ones(npts-nsettle)])
phi_in=array([zeros(nsettle),phin1[nsettle+1:npts]])
nbits=npts/spb
md=zeros(nbits*spb)
bits=around(np.random.uniform((nbits,)))
for m in arange(0,nbits):
for n in arange(0,spb):
index=(m-1)*spb+n
md[index]=(-1)**bits(m)
答案 0 :(得分:4)
此错误是因为您使用()
代替[]
索引数组,例如:
np.arange(10)(1)
给出:
TypeError: 'numpy.ndarray' object is not callable
虽然:
np.arange(10)[1]
给出:
1
答案 1 :(得分:3)
正如Saullo在他的回答中指出的那样,你没有以正确的方式编制索引,但是你没有正确移植代码。 freq_in
和phi_in
未正确定义且您未在bits
中生成随机向量,请查看以下代码:
import numpy as np
fdel = 2
fn = 10
zeta = 1 / np.sqrt(2)
spb = 100
npts = 2000
fs = 2000
freq_in = np.zeros((2000))
phi_in = np.zeros((2000))
t = np.arange(0,npts) / fs
nsettle = np.fix(npts/10)
tsettle = nsettle
phin1 = 2 * np.pi * fdel * (t-tsettle)
freq_in = np.hstack((np.zeros(nsettle), fdel * np.ones(npts-nsettle)))
phi_in = np.hstack((np.zeros(nsettle), phin1[int(nsettle):int(npts)]))
nbits = npts / spb
md = np.zeros(nbits * spb);
bits = np.random.randint(2, size=nbits)
for m in np.arange(0,nbits):
for n in np.arange(0,spb):
index = (m-1) * spb + n
md[index]=(-1)**bits[m]