lti squeeze: ndarray.ndim == 0 is also a scalar by bnavigator · Pull Request #595 · python-control/python-control

@bnavigator

@bnavigator

@coveralls

Coverage Status

Coverage remained the same at 89.274% when pulling 5646146 on bnavigator:fix-594 into 8b900ca on python-control:master.

@bnavigator

#594 is fixed, as one can check manually.

But I am confused that 4b44923 without f8fe08a cannot trigger a test failure.

And now I will really stop for today.

@bnavigator

@bnavigator

@bnavigator

Found it:

>>> np.array(0.1)
array(0.1)
>>> np.array(0.1)*1J
0.1j

sawyerbfuller

@sawyerbfuller

Found it:

>>> np.array(0.1)
array(0.1)
>>> np.array(0.1)*1J
0.1j

What is going on here? does np.array(0.1)*1 also return a scalar instead of an array?

@bnavigator

I guess it is a somewhat less intuitive result of the broadcasting mechanics.

>>> import numpy as np
>>> a=np.array(1.0)
>>> a
array(1.)
>>> a*1J
1j
>>> a*1
1.0
>>> 1*a
1.0
>>> 1J*a
1j
>>> a+1
2.0
>>> type(a)
<class 'numpy.ndarray'>
>>> type(1*a)
<class 'numpy.float64'>
>>> type(a*1J)
<class 'numpy.complex128'>

https://numpy.org/doc/stable/reference/arrays.scalars.html