summaryrefslogtreecommitdiff
path: root/scipy/base/twodim_base.py
diff options
context:
space:
mode:
authorTravis Oliphant <oliphant@enthought.com>2005-09-28 10:02:03 +0000
committerTravis Oliphant <oliphant@enthought.com>2005-09-28 10:02:03 +0000
commit07a2484e565aeb05a93b0b716160524b42032ab5 (patch)
tree3994d79fa2a2c30878fe82ff0915f5ef3725cd3e /scipy/base/twodim_base.py
parentb5ec235f1e0f149867450dfc3b48386ca1797c05 (diff)
downloadnumpy-07a2484e565aeb05a93b0b716160524b42032ab5.tar.gz
Fixed bugs.
Diffstat (limited to 'scipy/base/twodim_base.py')
-rw-r--r--scipy/base/twodim_base.py30
1 files changed, 18 insertions, 12 deletions
diff --git a/scipy/base/twodim_base.py b/scipy/base/twodim_base.py
index 0f1f96dbd..66a019c64 100644
--- a/scipy/base/twodim_base.py
+++ b/scipy/base/twodim_base.py
@@ -46,9 +46,6 @@ def eye(N, M=None, k=0, dtype=float):
and everything else is zeros.
"""
if M is None: M = N
- if isdtype(M):
- dtype = M
- M = N
m = equal(subtract.outer(arange(N), arange(M)),-k)
if dtype is None:
return m+0
@@ -63,16 +60,25 @@ def diag(v, k=0):
s = v.shape
if len(s)==1:
n = s[0]+abs(k)
- if k > 0:
- v = concatenate((zeros(k, v.dtype),v))
- elif k < 0:
- v = concatenate((v,zeros(-k, v.dtype)))
- return eye(n, k=k)*v
+ res = zeros((n,n), v.dtype)
+ i = arange(0,n-k)
+ if (k>=0):
+ fi = i+k+i*n
+ else:
+ fi = i+(i-k)*n
+ res.flat[fi] = v
+ return res
elif len(s)==2:
- v = add.reduce(eye(s[0], s[1], k=k)*v)
- if k > 0: return v[k:]
- elif k < 0: return v[:k]
- else: return v
+ N1,N2 = s
+ if k >= 0:
+ M = min(N1,N2-k)
+ i = arange(0,M)
+ fi = i+k+i*N2
+ else:
+ M = min(N1+k,N2)
+ i = arange(0,M)
+ fi = i + (i-k)*N2
+ return v.flat[fi]
else:
raise ValueError, "Input must be 1- or 2-d."