[SciPy-dev] 'O' type arrays and containers as values...

Travis Oliphant oliphant at ee.byu.edu
Fri Nov 4 15:00:51 CST 2005


Fernando Perez wrote:

>Hi all,
>
>If I understand things correctly, the following should work fine:
>
>In [3]: import scipy
>
>In [4]: scipy.__core_version__
>Out[4]: '0.4.3.1433'
>
>In [5]: a=scipy.empty((2,2),'O')
>
>In [6]: a[0,0] = (1,2,3)
>  
>
The problem here is the ambiguity of the left hand side and how 
assignment is generally done.   There is no special-check for this 
case.   All that happens is that (1,2,3) gets converted to an object 
array and the elements copied over.  So, you are trying to do the 
equivalent of

a[0,0] = array((1,2,3),'O')

But, the right-hand side is converted to a length-3 object array --- 
with container types it's ambiguous as to what you really want for the 
object array. 

Then of course the length-3 array cannot be copied into the result.  
Now, one solution is to special-case the PyArrayObject assignment and 
check for single-index assigment and just copy whatever the value is 
directly over.   Of course the more special-cases, the slower all code 
gets.

This has always been a problem.  You would get a similar error in Numeric.

Suggestions welcome.

-Travis




More information about the Scipy-dev mailing list