0

I am trying to convert Matlab code to Python but it gives an error when I convert the following line:

Matlab Code

md(1,index) = (-1)^bits(m);

Python equivalent

md[index]=(-1)**bits(m)

Error

md[index]=(-1)**bits(m)
TypeError: 'numpy.ndarray' object is not callable

Matlab Code

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 Code

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)
3
  • 3
    I suspect what that error means is that bits(m) is not a function, i.e. you shouldn't use parens to give it the index. Try bits[m] instead. Commented Aug 12, 2013 at 12:34
  • 1
    -1: python debugging tips Commented Aug 12, 2013 at 12:46
  • thanks it actually helped...but now its giving index out of bound Commented Aug 12, 2013 at 13:08

2 Answers 2

4

This error is becase you are indexing an array with () instead of [], example:

np.arange(10)(1)

gives:

TypeError: 'numpy.ndarray' object is not callable

While:

np.arange(10)[1]

gives:

1
Sign up to request clarification or add additional context in comments.

Comments

3

As Saullo pointed out in his answer you are not indexing in the right way, however you are not porting the code correctly. freq_in and phi_in are not properly defined and you are not generating a random vector in bits, take a look to the following code:

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]

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.