python - Need help converting Matlab's bsxfun to numpy -


i'm trying convert piece of matlab code, , line i'm struggling with:

f = 0 wlab = reshape(bsxfun(@times,cat(3,1-f,f/2,f/2),lab),[],3) 

i've come

wlab = lab*(np.concatenate((3,1-f,f/2,f/2)))  

how reshape now?

matlab

 reshape(x,[],3) 

is equivalent of numpy

 np.reshape(x,(-1,3)) 

the [] , -1 place holders 'fill in correct shape here'.

===============

i tried matlab expression octave - it's on different machine, i'll summarize action.

for lab=1:6 (6 elements) bsxfun produces (1,6,3) matrix; reshape turns (6,3), i.e. removes first dimension. cat produces (1,1,3) matrix.

np.reshape(np.array([1-f,f/2,f/2])[none,none,:]*lab[none,:,none],(-1,3)) 

for lab shape (n,m), bsxfun produces (n,m,3) matrix; reshape make (n*m,3)

so 2d lab, numpy needs be

np.array([1-f,f/2,f/2])[none,none,:]*lab[:,:,none] 

(in matlab lab 2d (or larger), 2nd case closer action if n 1).

=======================

np.array([1-f,f/2,f/2])*lab[...,none] 

would handle shaped lab

if make octave lab (4,2,3), `bsxfun (4,2,3)

the matching numpy expression be

in [94]: (np.array([1-f,f/2,f/2])*lab).shape out[94]: (4, 2, 3) 

numpy adds dimensions start of (3,) array match dimensions of lab, effectively

(np.array([1-f,f/2,f/2])[none,none,:]*lab) # 3d lab 

if f=0, array [1,0,0], has effect of zeroing values on last dimension of lab. in effect, changing 'color'.


Comments

Popular posts from this blog

javascript - Laravel datatable invalid JSON response -

java - Exception in thread "main" org.springframework.context.ApplicationContextException: Unable to start embedded container; -

sql server 2008 - My Sql Code Get An Error Of Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value '8:45 AM' to data type int -