Forums

Python (numpy) to Matlab/Octave conversion problem

Started by jtp_1960 6 days ago4 replieslatest reply 6 days ago101 views

I'm new to python language. I can't figure out what happens here in code:

def evaluate(self, x):
        p1 = 1
        p2 = np.zeros((1, self.r), dtype=self.dtype)
        p2 += self.coeff[0, np.newaxis, :]
        for k in range(1, self.n):
            v = x - self.xcoord[k-1]
            p1 = v*p1
            p2 += p1[:, np.newaxis] * self.coeff[k]

        return p2

where, 
n = array size of xcoord
r = self.ycoord.shape
coeff = np.zeros((self.n+1, self.r), dtype=self.dtype)

How these 

self.coeff[0, np.newaxis, :] 

and 

p1[:, np.newaxis] 

can be converted to Matlab/Octave language ? 

p1 is defined as variable but, then later it is used as an array type variable. coeff is an array type variable ... but, what is done in command

self.coeff[0, np.newaxis, :]

?

[ - ]
Reply by omersayliJune 20, 2022

In NumPy, 

np.newaxis 

is used to add 'dimension' to the vector or matrix. 

The * is used for one-to-one multiplication of elements (not matrix product). I guess 'np.newaxis' is used to have matching matrix dimensions

[ - ]
Reply by jtp_1960June 21, 2022

Yes, it looks like np.newaxis does not (in these cases) change the dimensions so, the function can be converted to Matlab/Octave language as like:


 % evaluation
  p1 = 1;
  p2 = zeros(1, 1);
  p2 += coeff(1);

  for k = 1:n
    v = x - xcoord(k);
    p1 = v*p1;
    p2 += p1 * coeff(k+1);
  endfor
[ - ]
Reply by omersayliJune 20, 2022

Hi,


p2 += p1[:, np.newaxis] * self.coeff[k]

means 

p2 = p2 + p1[:, np.newaxis] * self.coeff[k]
[ - ]
Reply by jtp_1960June 20, 2022

I'm C++ developer mainly so that is std syntax ... I'll edit the question a bit.