[Numpy-discussion] identity
Keith Goodman
kwgoodman@gmail....
Wed Aug 12 09:54:25 CDT 2009
On Wed, Aug 12, 2009 at 7:24 AM, Keith Goodman<kwgoodman@gmail.com> wrote:
> On Wed, Aug 12, 2009 at 1:31 AM, Lars
> Bittrich<lars.bittrich@googlemail.com> wrote:
>> Hi,
>>
>> a colleague made me aware of a speed issue with numpy.identity. Since he was
>> using numpy.diag(numpy.ones(N)) before, he expected identity to be at least as
>> fast as diag. But that is not the case.
>>
>> We found that there was a discussion on the list (July, 20th; "My identity" by
>> Keith Goodman). The presented solution was much faster. Someone wondered if
>> the change was already made in the svn.
>> But I got something different:
>>
>> In [1]:import numpy
>>
>> In [2]:numpy.__version__
>> Out[2]:'1.4.0.dev7301'
>>
>> In [3]:numpy.identity??
>> [...]
>> def identity(n, dtype=None):
>> """
>> [...]
>> """
>> a = array([1]+n*[0],dtype=dtype)
>> b = empty((n,n),dtype=dtype)
>>
>> # Note that this assignment depends on the convention that since the a
>> # array is shorter than the flattened b array, then the a array will
>> # be repeated until it is the appropriate size. Given a's construction,
>> # this nicely sets the diagonal to all ones.
>> b.flat = a
>> return b
>>
>> instead of (mail by Keith Goodman):
>>
>> def myidentity(n, dtype=None):
>> a = zeros((n,n), dtype=dtype)
>> a.flat[::n+1] = 1
>> return a
>>
>>
>> Did I look at the wrong place or is there a reason to keep the slow version of
>> identity?
>
> Things tend to get lost on the mailing list. The next step would be to
> file a ticket on the numpy trac. (I've never done that) That would
> increase the chance of someone important taking a look at it.
Here's the ticket:
http://projects.scipy.org/numpy/ticket/1193
BTW, a fast eye function is already in svn. But identity, having fewer
options, is a tiny bit faster.
More information about the NumPy-Discussion
mailing list