[Numpy-discussion] identity
Lars Bittrich
lars.bittrich at googlemail.com
Wed Aug 12 04:31:57 EDT 2009
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?
Lars
More information about the NumPy-Discussion
mailing list