summaryrefslogtreecommitdiff
path: root/numpy/lib
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/lib')
-rw-r--r--numpy/lib/arraysetops.py2
-rw-r--r--numpy/lib/function_base.py17
-rw-r--r--numpy/lib/tests/test_function_base.py2
-rw-r--r--numpy/lib/tests/test_index_tricks.py4
-rw-r--r--numpy/lib/tests/test_recfunctions.py4
-rw-r--r--numpy/lib/tests/test_shape_base.py7
-rw-r--r--numpy/lib/twodim_base.py31
7 files changed, 40 insertions, 27 deletions
diff --git a/numpy/lib/arraysetops.py b/numpy/lib/arraysetops.py
index 98597bc46..c4441d8a5 100644
--- a/numpy/lib/arraysetops.py
+++ b/numpy/lib/arraysetops.py
@@ -229,7 +229,7 @@ def intersect1d(ar1, ar2, assume_unique=False):
ar2 = unique(ar2)
aux = np.concatenate( (ar1, ar2) )
aux.sort()
- return aux[aux[1:] == aux[:-1]]
+ return aux[:-1][aux[1:] == aux[:-1]]
def setxor1d(ar1, ar2, assume_unique=False):
"""
diff --git a/numpy/lib/function_base.py b/numpy/lib/function_base.py
index caef5c709..b269d98a1 100644
--- a/numpy/lib/function_base.py
+++ b/numpy/lib/function_base.py
@@ -778,7 +778,7 @@ def select(condlist, choicelist, default=0):
S = S*ones(asarray(pfac).shape, S.dtype)
return choose(S, tuple(choicelist))
-def copy(a):
+def copy(a, order='C', maskna=None):
"""
Return an array copy of the given object.
@@ -786,6 +786,15 @@ def copy(a):
----------
a : array_like
Input data.
+ order : {'C', 'F', 'A', 'K'}, optional
+ Controls the memory layout of the copy. 'C' means C-order,
+ 'F' means F-order, 'A' means 'F' if `a` is Fortran contiguous,
+ 'C' otherwise. 'K' means match the layout of `a` as closely
+ as possible.
+ maskna : bool, optional
+ If specifies, forces the copy to have or to not have an
+ NA mask. This is a way to remove an NA mask from an array
+ while making a copy.
Returns
-------
@@ -815,7 +824,7 @@ def copy(a):
False
"""
- return array(a, copy=True)
+ return array(a, order=order, copy=True, maskna=maskna)
# Basic operations
@@ -3317,6 +3326,7 @@ def delete(arr, obj, axis=None):
"invalid entry")
newshape[axis]-=1;
new = empty(newshape, arr.dtype, arr.flags.fnc)
+ new.flags.maskna = arr.flags.maskna
slobj[axis] = slice(None, obj)
new[slobj] = arr[slobj]
slobj[axis] = slice(obj,None)
@@ -3333,6 +3343,7 @@ def delete(arr, obj, axis=None):
return arr.copy()
newshape[axis] -= numtodel
new = empty(newshape, arr.dtype, arr.flags.fnc)
+ new.flags.maskna = arr.flags.maskna
# copy initial chunk
if start == 0:
pass
@@ -3464,6 +3475,7 @@ def insert(arr, obj, values, axis=None):
"in dimension %d" % (obj, N, axis))
newshape[axis] += 1;
new = empty(newshape, arr.dtype, arr.flags.fnc)
+ new.flags.maskna = arr.flags.maskna
slobj[axis] = slice(None, obj)
new[slobj] = arr[slobj]
slobj[axis] = obj
@@ -3490,6 +3502,7 @@ def insert(arr, obj, values, axis=None):
index2 = setdiff1d(arange(numnew+N),index1)
newshape[axis] += numnew
new = empty(newshape, arr.dtype, arr.flags.fnc)
+ new.flags.maskna = arr.flags.maskna
slobj2 = [slice(None)]*ndim
slobj[axis] = index1
slobj2[axis] = index2
diff --git a/numpy/lib/tests/test_function_base.py b/numpy/lib/tests/test_function_base.py
index 105389d6d..0b6b1e19d 100644
--- a/numpy/lib/tests/test_function_base.py
+++ b/numpy/lib/tests/test_function_base.py
@@ -452,7 +452,7 @@ class TestTrapz(TestCase):
def test_simple(self):
r = trapz(exp(-1.0 / 2 * (arange(-10, 10, .1)) ** 2) / sqrt(2 * pi), dx=0.1)
#check integral of normal equals 1
- assert_almost_equal(sum(r, axis=0), 1, 7)
+ assert_almost_equal(r, 1, 7)
def test_ndim(self):
x = linspace(0, 1, 3)
diff --git a/numpy/lib/tests/test_index_tricks.py b/numpy/lib/tests/test_index_tricks.py
index e4c0bde93..2c6500a57 100644
--- a/numpy/lib/tests/test_index_tricks.py
+++ b/numpy/lib/tests/test_index_tricks.py
@@ -147,6 +147,10 @@ class TestIndexExpression(TestCase):
assert_equal(a[:,:3,[1,2]], a[index_exp[:,:3,[1,2]]])
assert_equal(a[:,:3,[1,2]], a[s_[:,:3,[1,2]]])
+def test_c_():
+ a = np.c_[np.array([[1,2,3]]), 0, 0, np.array([[4,5,6]])]
+ assert_equal(a, [[1, 2, 3, 0, 0, 4, 5, 6]])
+
def test_fill_diagonal():
a = zeros((3, 3),int)
fill_diagonal(a, 5)
diff --git a/numpy/lib/tests/test_recfunctions.py b/numpy/lib/tests/test_recfunctions.py
index 0a3f1e3e3..3d2d1e983 100644
--- a/numpy/lib/tests/test_recfunctions.py
+++ b/numpy/lib/tests/test_recfunctions.py
@@ -626,7 +626,7 @@ class TestJoinBy2(TestCase):
dtype=[('a', int), ('b', int), ('d', int)])
def test_no_r1postfix(self):
- "Basic test of join_by"
+ "Basic test of join_by no_r1postfix"
a, b = self.a, self.b
test = join_by('a', a, b, r1postfix='', r2postfix='2', jointype='inner')
@@ -644,7 +644,7 @@ class TestJoinBy2(TestCase):
self.assertRaises(ValueError, join_by, 'a', self.a, self.b, r1postfix='', r2postfix='')
def test_no_r2postfix(self):
- "Basic test of join_by"
+ "Basic test of join_by no_r2postfix"
a, b = self.a, self.b
test = join_by('a', a, b, r1postfix='1', r2postfix='', jointype='inner')
diff --git a/numpy/lib/tests/test_shape_base.py b/numpy/lib/tests/test_shape_base.py
index 9d6cd0551..56178e8af 100644
--- a/numpy/lib/tests/test_shape_base.py
+++ b/numpy/lib/tests/test_shape_base.py
@@ -258,6 +258,13 @@ class TestSqueeze(TestCase):
assert_array_equal(squeeze(b),reshape(b,(20,10,20)))
assert_array_equal(squeeze(c),reshape(c,(20,10)))
+ # Squeezing to 0-dim should still give an ndarray
+ a = [[[1.5]]]
+ res = squeeze(a)
+ assert_equal(res, 1.5)
+ assert_equal(res.ndim, 0)
+ assert_equal(type(res), ndarray)
+
class TestKron(TestCase):
def test_return_type(self):
diff --git a/numpy/lib/twodim_base.py b/numpy/lib/twodim_base.py
index d95a59e3f..12bba99a6 100644
--- a/numpy/lib/twodim_base.py
+++ b/numpy/lib/twodim_base.py
@@ -9,7 +9,7 @@ __all__ = ['diag','diagflat','eye','fliplr','flipud','rot90','tri','triu',
from numpy.core.numeric import asanyarray, equal, subtract, arange, \
zeros, greater_equal, multiply, ones, asarray, alltrue, where, \
- empty
+ empty, diagonal
def fliplr(m):
"""
@@ -166,7 +166,7 @@ def rot90(m, k=1):
# k == 3
return fliplr(m.swapaxes(0,1))
-def eye(N, M=None, k=0, dtype=float):
+def eye(N, M=None, k=0, dtype=float, maskna=False):
"""
Return a 2-D array with ones on the diagonal and zeros elsewhere.
@@ -182,6 +182,8 @@ def eye(N, M=None, k=0, dtype=float):
to a lower diagonal.
dtype : data-type, optional
Data-type of the returned array.
+ maskna : boolean
+ If this is true, the returned array will have an NA mask.
Returns
-------
@@ -207,24 +209,20 @@ def eye(N, M=None, k=0, dtype=float):
"""
if M is None:
M = N
- m = zeros((N, M), dtype=dtype)
- if k >= M:
- return m
- if k >= 0:
- i = k
- else:
- i = (-k) * M
- m[:M-k].flat[i::M+1] = 1
+ m = zeros((N, M), dtype=dtype, maskna=maskna)
+ diagonal(m, k)[...] = 1
return m
def diag(v, k=0):
"""
Extract a diagonal or construct a diagonal array.
+ As of NumPy 1.7, extracting a diagonal always returns a view into `v`.
+
Parameters
----------
v : array_like
- If `v` is a 2-D array, return a copy of its `k`-th diagonal.
+ If `v` is a 2-D array, return a view of its `k`-th diagonal.
If `v` is a 1-D array, return a 2-D array with `v` on the `k`-th
diagonal.
k : int, optional
@@ -278,16 +276,7 @@ def diag(v, k=0):
res[:n-k].flat[i::n+1] = v
return res
elif len(s) == 2:
- if k >= s[1]:
- return empty(0, dtype=v.dtype)
- if v.flags.f_contiguous:
- # faster slicing
- v, k, s = v.T, -k, s[::-1]
- if k >= 0:
- i = k
- else:
- i = (-k) * s[1]
- return v[:s[1]-k].flat[i::s[1]+1]
+ return v.diagonal(k)
else:
raise ValueError("Input must be 1- or 2-d.")