[Numpy-discussion] hstack(arr_Int32, arr_float32) fails because of casting rules

Travis Oliphant oliphant.travis at ieee.org
Thu Aug 24 23:03:10 CDT 2006


Sebastian Haase wrote:
> On Thursday 24 August 2006 17:28, Travis Oliphant wrote:
>   
>> Sebastian Haase wrote:
>>     
>>> Hi,
>>> I get
>>> TypeError: array cannot be safely cast to required type
>>>
>>> when calling hstack()  ( which calls  concatenate() )
>>> on two arrays being a int32 and a float32 respectively.
>>>
>>> I understand now that a int32 cannot be safely converted into a float32
>>> but why does  concatenate  not automatically
>>> up(?) cast to float64  ??
>>>       
>> Basically, NumPy is following Numeric's behavior of raising an error in
>> this case of unsafe casting in concatenate.  For functions that are not
>> universal-function objects, mixed-type behavior works basically just
>> like Numeric did (using the ordering of the types to determine which one
>> to choose as the output).
>>
>> It could be argued that the ufunc-rules should be followed instead.
>>
>> -Travis
>>
>>     
> Are you saying the  ufunc-rules  would convert "int32-float32" to float64  and 
> hence make my code "just work" !?
>   

This is now the behavior in SVN.   Note that this is different from both 
Numeric (which gave an error) and numarray (which coerced to float32). 

But, it is consistent with how mixed-types are handled in calculations 
and is thus an easier rule to explain.

Thanks for the testing.

-Travis





More information about the Numpy-discussion mailing list