[SciPy-User] scalars vs array of length 1
Sturla Molden
sturla at molden.no
Thu Jul 8 16:30:31 EDT 2010
Victor Eijkhout skrev:
> I want to write a function that can accept both a scalar and a vector, when called on a vector it should return a vector of scalar application results. However, scalars seem to be treated differently from length-1 lists.
>
>
Is Matlab syntax is confusing you?
In Python, length-1 containers and scalars are not the same.
Lists:
>>> a = [1,2,3,4]
>>> print a
[1, 2, 3, 4]
>>> print a[0]
1
>>> print a[0:1]
[1]
>>> print a[0:0]
[]
NumPy does the same:
>>> import numpy as np
>>> a = np.array([1,2,3,4])
>>> print a
[1 2 3 4]
>>> print a[0]
1
>>> print a[0:1]
[1]
>>> print a[0:0]
[]
>>> a
array([1, 2, 3, 4])
>>> type(a[0])
<type 'numpy.int32'>
>>> type(a[0:1])
<type 'numpy.ndarray'>
You can use the function np.isscalar to check if an argument is scalar.
Sturla
> %%%%% input
>
> from numpy import array,matrix,cos,sin,tan
>
> def f(x):
> valueMatrix = array([cos(x),sin(x),tan(x)])
> print valueMatrix.shape
> valueMatrix = matrix(valueMatrix)
> print valueMatrix.shape
> print
>
> print "scalars"
> f(5)
> f([5])
>
> %%% output
>
> scalars
> (3,)
> (1, 3)
>
> (3, 1)
> (3, 1)
>
> %%%%
>
> How do I get that shape to be the same in both cases?
>
> Victor.
>
> _______________________________________________
> SciPy-User mailing list
> SciPy-User at scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-user
>
More information about the SciPy-User
mailing list