# [NumPy-Tickets] [NumPy] #1192: integer dot product

NumPy Trac numpy-tickets@scipy....
Mon Feb 28 23:37:13 CST 2011

```#1192: integer dot product
----------------------+-----------------------------------------------------
Reporter:  jloper   |       Owner:  somebody
Type:  defect   |      Status:  closed
Priority:  normal   |   Milestone:
Component:  Other    |     Version:  1.2.1
Resolution:  invalid  |    Keywords:  dot int8
----------------------+-----------------------------------------------------
Changes (by rgommers):

* status:  new => closed
* resolution:  => invalid

Old description:

> the 'dot' function is designed to work ONLY WITH FLOATING POINT NUMBERS,
> but it doesn't raise an exception or even a warning when you feed it
> integer values.  This is going to confuse people.
>
> In [239]: a=require(randint(0,2,5000),int8)
> In [240]: b=require(randint(0,2,5000),int8)
> In [241]: dot(a,b); sum(a*b)
> Out[241]: -82
> Out[241]: 1198
>
> Let's just say it is a very rare use-case that people want sum(a*b) mod
> 128.

New description:

the 'dot' function is designed to work ONLY WITH FLOATING POINT NUMBERS,
but it doesn't raise an exception or even a warning when you feed it
integer values.  This is going to confuse people.
{{{
In [239]: a=require(randint(0,2,5000),int8)
In [240]: b=require(randint(0,2,5000),int8)
In [241]: dot(a,b); sum(a*b)
Out[241]: -82
Out[241]: 1198
}}}
Let's just say it is a very rare use-case that people want sum(a*b) mod
128.

--

Comment:

Your example works fine with int32, see below, so your assertion it works
only with floats is false. If one uses int8 the expected return values are
also of dtype int8. If you use int8 arrays, it's often *because* you want
to use integer arithmetic with its own rules. So I think this ticket can
be closed.

{{{
In [3]: from numpy.random import randint

In [4]: a = randint(0, 2, 5000).astype(np.int8)

In [5]: a
Out[5]: array([1, 1, 1, ..., 0, 1, 0], dtype=int8)

In [6]: b = randint(0, 2, 5000).astype(np.int8)

In [8]: np.dot(a, b); sum(a*b)
Out[8]: -13
Out[8]: 1267

In [10]: a = randint(0, 2, 5000).astype(np.int32)

In [11]: b = randint(0, 2, 5000).astype(np.int32)

In [12]: np.dot(a, b); sum(a*b)
Out[12]: 1255
Out[12]: 1255
}}}

--
Ticket URL: <http://projects.scipy.org/numpy/ticket/1192#comment:1>
NumPy <http://projects.scipy.org/numpy>
My example project
```