On Monday 17 July 2006 12:38, Travis Oliphant wrote:
Sebastian Haase wrote:
On Monday 17 July 2006 12:10, Travis Oliphant wrote:
Sebastian Haase wrote:
Traceback (most recent call last): File "<input>", line 1, in ? TypeError: array cannot be safely cast to required type
> dd=d.astype(N.float32) > N.dot(dd,ccc)
[[[ 1. 1. 1.] [ 1. 1. 1.] [ 1. 1. 1.]]
[[ 2. 2. 2.] [ 2. 2. 2.] [ 2. 2. 2.]]]
The TypeError looks like a numpy bug !
I don't see why this is a bug. You are trying to coerce a 32-bit integer to a 32-bit float. That is going to lose precision and so you get the error indicated.
-Travis
In numarray I do not get an error. Would the error go away if I had 64 bit float !? It seems though that having ones and twos in an int array should fit just fine into a float32 array !?
This could be considered a bug in numarray. It's force-casting the result. That isn't the normal behavior of mixed-type functions.
Also, the policy on type-casting is not to search the array to see if it's possible to do the conversion on every element (that would be slow on large arrays). The policy is to base the decision only on the data-types themselves (i.e. whether it's *possible* to lose precision*).
-Travis
*There is one exception to this policy in NumPy: 64-bit integers are allowed to be cast to 64-bit doubles --- other-wise on you would get a lot of non-standard long-doubles showing up on 64-bit systems. This policy was decided after discussion last year.
OK - understood. Combining int32 with float64 proves to be less cumbersome ... Any idea on my main question ? What is the dot product of a 2x2 and 3x2x3 supposed to look like ? Why are numarray and numpy giving different answers ?? Thanks, Sebastian Haase