# [SciPy-User] [SciPy-user] lambda functions within matrix

Warren Weckesser warren.weckesser@enthought....
Thu Apr 29 19:05:37 CDT 2010

```archeryguru2000 wrote:
> Hello all,
> I'm trying to create a matrix that will allow me to specify which cells will
> contain certain values.  I have a line of code that I just cannot straighten
> out.  In SymPy I can use the following:
>
>
>>>> sympy.Matrix(N,N,lambda i,j: i==j & j<int(M/2+1))
>>>>
>
> where N and M are integers.  This creates a zero-matrix with ones in the
> upper left diagonal but the ones do not continue to the lower left.  However
> in SciPy, I assumed I would've used the following:
>
>
>>>> scipy.fromfunction(lambda i,j: i==j & j<int(M/2+1), (N,N))
>>>>
>
> but this gives an error that seems to pertain to my lambda function?
> unsupported operand type(s) for &: 'float' and 'float'
>
>

In numpy, & has higher precedence than the relational operators == and

scipy.fromfunction(lambda i,j: (i==j) & (j<int(M/2+1)), (N,N))

For example:

In [16]: N = 4

In [17]: M = 2

In [18]: scipy.fromfunction(lambda i,j: (i==j) & (j<int(M/2+1)), (N,N))
Out[18]:
array([[ True, False, False, False],
[False,  True, False, False],
[False, False, False, False],
[False, False, False, False]], dtype=bool)

In [19]: scipy.fromfunction(lambda i,j: (i==j) & (j<int(M/2+1)),
(N,N)).astype(float)
Out[19]:
array([[ 1.,  0.,  0.,  0.],
[ 0.,  1.,  0.,  0.],
[ 0.,  0.,  0.,  0.],
[ 0.,  0.,  0.,  0.]])

Warren

> Any suggestions?
> Thanks,
> ~~archery~~
>

```