summaryrefslogtreecommitdiff
path: root/numpy/ma/extras.py
diff options
context:
space:
mode:
authorDavid Cournapeau <cournape@gmail.com>2009-02-20 16:37:01 +0000
committerDavid Cournapeau <cournape@gmail.com>2009-02-20 16:37:01 +0000
commitda364a18e447c334dfa2ca5083b08e1b6a7c0d10 (patch)
tree7783575e8fe37f8e13ddfc050e9c9d94529bca8e /numpy/ma/extras.py
parent745cfe4c60a59c01a8c2fd6ef68a8ca87f2180f5 (diff)
parenta271ac2e41aacab2903864cf371c4ba94cf4ec3f (diff)
downloadnumpy-da364a18e447c334dfa2ca5083b08e1b6a7c0d10.tar.gz
Merged revisions 6185-6187,6191-6221,6235-6238,6240-6241,6244,6250-6251,6253,6256,6258,6260-6261,6263,6265-6266,6268,6271,6283-6286,6291-6316,6320-6352,6354,6356,6358-6368,6370-6373,6398-6400,6410,6421-6424 via svnmerge from
http://svn.scipy.org/svn/numpy/trunk ................ r6185 | cdavid | 2008-12-22 01:19:14 +0900 (Mon, 22 Dec 2008) | 1 line Add doc sources so that sdist tarball contains them. ................ r6186 | pierregm | 2008-12-22 19:01:51 +0900 (Mon, 22 Dec 2008) | 4 lines testutils: assert_array_compare : make sure that the comparison is performed on ndarrays, and make sure we use the np version of the comparison function. core: * Try not to touch the data in unary/binary ufuncs, (including inplace) ................ r6187 | pearu | 2008-12-22 19:05:00 +0900 (Mon, 22 Dec 2008) | 1 line Fix a bug. ................ r6191 | cdavid | 2008-12-23 13:10:59 +0900 (Tue, 23 Dec 2008) | 1 line Fix typos in the comments for manifest. ................ r6192 | cdavid | 2008-12-23 13:11:12 +0900 (Tue, 23 Dec 2008) | 1 line Use msvcrt values if available for manifest generation: only there starting from python 2.6.1. ................ r6193 | pearu | 2008-12-23 18:02:15 +0900 (Tue, 23 Dec 2008) | 1 line Fix issue 964: f2py python 2.6, 2.6.1 support. ................ r6194 | pierregm | 2008-12-24 08:43:43 +0900 (Wed, 24 Dec 2008) | 12 lines testutils: * assert_equal : use assert_equal_array on records * assert_array_compare : prevent the common mask to be back-propagated to the initial input arrays. * assert_equal_array : use operator.__eq__ instead of ma.equal * assert_equal_less: use operator.__less__ instead of ma.less core: * Fixed _check_fill_value for nested flexible types * Add a ndtype option to _make_mask_descr * Fixed mask_or for nested flexible types * Fixed the printing of masked arrays w/ flexible types. ................ r6195 | cdavid | 2008-12-26 21:16:45 +0900 (Fri, 26 Dec 2008) | 1 line Update to handle numscons 0.10.0 and above. ................ r6196 | cdavid | 2008-12-26 21:36:19 +0900 (Fri, 26 Dec 2008) | 1 line Do not import msvcrt globally in mingw32compiler module, since the module is imported on all platforms. ................ r6197 | cdavid | 2008-12-26 23:39:55 +0900 (Fri, 26 Dec 2008) | 1 line Do not test for functions already tested by python configure script. ................ r6198 | cdavid | 2008-12-27 14:56:58 +0900 (Sat, 27 Dec 2008) | 1 line BUG: Add a runtime check about endianness, to detect bug 4728 in python on Mac OS X. ................ r6199 | cdavid | 2008-12-27 19:06:25 +0900 (Sat, 27 Dec 2008) | 1 line Fix some typo/syntax errors when converting dict access to a function in manifest generation. ................ r6200 | cdavid | 2008-12-27 19:15:30 +0900 (Sat, 27 Dec 2008) | 1 line BUG (#970): fix a python 2.6 bug in distutils which caused an unhelpful Error:None message when trying to build with no VS installed and without the -c mingw32 option. ................ r6201 | cdavid | 2008-12-27 19:30:49 +0900 (Sat, 27 Dec 2008) | 1 line Improve the error message when initializing compiler failed. ................ r6202 | cdavid | 2008-12-27 19:32:05 +0900 (Sat, 27 Dec 2008) | 1 line Try to initialize the msvc compiler before the general code to detect the error early. ................ r6203 | cdavid | 2008-12-27 19:43:41 +0900 (Sat, 27 Dec 2008) | 1 line BUG (#970): this commit should fix the actual bug, which albeeit linked to commir r6200, was caused in anoter code path. ................ r6204 | cdavid | 2008-12-27 19:57:05 +0900 (Sat, 27 Dec 2008) | 1 line Fix manifest generation. ................ r6205 | cdavid | 2008-12-27 20:46:08 +0900 (Sat, 27 Dec 2008) | 1 line BUG (#827): close temp file before reopning them on windows, and make sure they are not automatically deleted on close either (2.6and higher specific). ................ r6206 | cdavid | 2008-12-27 21:18:47 +0900 (Sat, 27 Dec 2008) | 1 line Do not define the union for runtime endianness detection if we don't check endianness. ................ r6207 | cdavid | 2008-12-27 22:48:52 +0900 (Sat, 27 Dec 2008) | 1 line Start working on formatting failure on 2.6: copy how python does complex formatting. ................ r6208 | cdavid | 2008-12-27 23:44:11 +0900 (Sat, 27 Dec 2008) | 1 line Fix formatting for purely imaginary complex numbers. ................ r6209 | cdavid | 2008-12-27 23:53:15 +0900 (Sat, 27 Dec 2008) | 1 line More work on formatting float. ................ r6210 | cdavid | 2008-12-27 23:59:41 +0900 (Sat, 27 Dec 2008) | 1 line Finish formatting fixes for float scalar arrays. ................ r6211 | cdavid | 2008-12-28 00:12:20 +0900 (Sun, 28 Dec 2008) | 1 line Include umath_funcs_c99 in multiarray so that we can use isinf and co macros. ................ r6212 | cdavid | 2008-12-28 01:15:04 +0900 (Sun, 28 Dec 2008) | 1 line Include config.h before our C99 math compat layer. ................ r6213 | cdavid | 2008-12-28 01:15:41 +0900 (Sun, 28 Dec 2008) | 1 line Fix formatting. ................ r6214 | cdavid | 2008-12-28 01:16:18 +0900 (Sun, 28 Dec 2008) | 1 line Do not define FMTR and FMTI macros, as those are already defined on some platforms. ................ r6215 | cdavid | 2008-12-28 01:16:52 +0900 (Sun, 28 Dec 2008) | 1 line More formatting fixes. ................ r6216 | cdavid | 2008-12-28 01:17:27 +0900 (Sun, 28 Dec 2008) | 1 line Remove undef of removed macro. ................ r6217 | cdavid | 2008-12-28 01:33:40 +0900 (Sun, 28 Dec 2008) | 1 line Do not use PyOS_ascii_formatd, as it does not handle long double correctly. ................ r6218 | cdavid | 2008-12-28 02:19:40 +0900 (Sun, 28 Dec 2008) | 1 line Try ugly hack to circumvent long double brokenness with mingw. ................ r6219 | cdavid | 2008-12-28 02:25:50 +0900 (Sun, 28 Dec 2008) | 1 line Use ugly hack for mingw long double pb with complex format function as well. ................ r6220 | cdavid | 2008-12-28 12:18:20 +0900 (Sun, 28 Dec 2008) | 1 line Revert formatting changes: ascii_formatd only works for double, so we can't use it as it is for our formatting needs. ................ r6221 | cdavid | 2008-12-28 15:44:06 +0900 (Sun, 28 Dec 2008) | 1 line Do not add doc sources through add_data_dir: it will put the docs alongside numpy, as a separate package, which is not what we want. Use the manifest instead, since that's the only way I know of to include something in sdist-generated tarballs. ................ r6235 | cdavid | 2008-12-29 16:57:52 +0900 (Mon, 29 Dec 2008) | 13 lines Merged revisions 6233-6234 via svnmerge from http://svn.scipy.org/svn/numpy/branches/fix_float_format ........ r6233 | cdavid | 2008-12-29 12:49:09 +0900 (Mon, 29 Dec 2008) | 1 line Use parametric tests for format tests so that it is clearer which type is failing. ........ r6234 | cdavid | 2008-12-29 12:49:27 +0900 (Mon, 29 Dec 2008) | 1 line Fix formatting tests: cfloat and cdouble as well as np.float and np.double are the same; make sure we test 4 bytes float. ........ ................ r6236 | cdavid | 2008-12-29 17:02:15 +0900 (Mon, 29 Dec 2008) | 1 line Add nan/inf tests for formatting. ................ r6237 | cdavid | 2008-12-29 17:26:04 +0900 (Mon, 29 Dec 2008) | 1 line Add test for real float types locale independance. ................ r6238 | cdavid | 2008-12-29 17:35:06 +0900 (Mon, 29 Dec 2008) | 1 line Clearer error messages for formatting failures. ................ r6240 | cdavid | 2008-12-30 12:48:11 +0900 (Tue, 30 Dec 2008) | 1 line Add tests for print of float types. ................ r6241 | cdavid | 2008-12-30 12:56:54 +0900 (Tue, 30 Dec 2008) | 1 line Add print tests for complex types. ................ r6244 | cdavid | 2008-12-30 13:20:48 +0900 (Tue, 30 Dec 2008) | 1 line Fix test for print: forgot to make sure the value is a float before comparing it. ................ r6250 | cdavid | 2008-12-30 14:02:28 +0900 (Tue, 30 Dec 2008) | 17 lines Merged revisions 6247-6249 via svnmerge from http://svn.scipy.org/svn/numpy/branches/fix_float_format ........ r6247 | cdavid | 2008-12-30 13:41:37 +0900 (Tue, 30 Dec 2008) | 1 line Handle 1e10 specially, as it is the limit where exp notation is shorter than decimal for single precision, but not for double (python native one). ........ r6248 | cdavid | 2008-12-30 13:47:38 +0900 (Tue, 30 Dec 2008) | 1 line Refactor a bit redirected output print test. ........ r6249 | cdavid | 2008-12-30 13:49:31 +0900 (Tue, 30 Dec 2008) | 1 line Fix test for single precision print. ........ ................ r6251 | cdavid | 2008-12-30 14:12:50 +0900 (Tue, 30 Dec 2008) | 1 line Use np.inf instead of float('inf'), as the later does not work on windows for python < 2.6. ................ r6253 | cdavid | 2008-12-30 14:15:09 +0900 (Tue, 30 Dec 2008) | 1 line Fix typo in test. ................ r6256 | cdavid | 2008-12-30 14:34:22 +0900 (Tue, 30 Dec 2008) | 1 line Special case float tests on windows: python 2.5 and below have >=3 digits in the exp. ................ r6258 | cdavid | 2008-12-30 14:42:03 +0900 (Tue, 30 Dec 2008) | 1 line Hardcode reference for inf/nan-involved values. ................ r6260 | cdavid | 2008-12-30 14:50:18 +0900 (Tue, 30 Dec 2008) | 1 line Fix more formatting tests on win32. ................ r6261 | cdavid | 2008-12-30 14:52:16 +0900 (Tue, 30 Dec 2008) | 1 line Fix some more redirected output print tests. ................ r6263 | cdavid | 2008-12-30 15:01:31 +0900 (Tue, 30 Dec 2008) | 1 line More fixes for print tests. ................ r6265 | cdavid | 2008-12-30 15:03:56 +0900 (Tue, 30 Dec 2008) | 1 line Fix typo. ................ r6266 | cdavid | 2008-12-30 15:08:06 +0900 (Tue, 30 Dec 2008) | 1 line Fix typo. ................ r6268 | cdavid | 2008-12-30 15:12:26 +0900 (Tue, 30 Dec 2008) | 1 line complex scalar arrays cannot be created from real/imag args: wrap init values in a complex. ................ r6271 | cdavid | 2008-12-30 15:32:03 +0900 (Tue, 30 Dec 2008) | 1 line Do not use dict for reference: hashing on scalar arrays does not work as I expected. ................ r6283 | ptvirtan | 2008-12-31 10:14:47 +0900 (Wed, 31 Dec 2008) | 1 line Fix #951: make tests to clean temp files properly ................ r6284 | jarrod.millman | 2009-01-01 08:25:03 +0900 (Thu, 01 Jan 2009) | 2 lines ran reindent ................ r6285 | alan.mcintyre | 2009-01-01 08:46:34 +0900 (Thu, 01 Jan 2009) | 15 lines Remove the following deprecated items from numpy.testing: - ParametricTestCase - The following arguments from numpy.testing.Tester.test(): level, verbosity, all, sys_argv, testcase_pattern - Path manipulation functions: set_package_path, set_local_path, restore_path - NumpyTestCase, NumpyTest Also separated testing parameter setup from NoseTester.test into NoseTester.prepare_test_args for use in a utility script for valgrind testing (see NumPy ticket #784). ................ r6286 | jarrod.millman | 2009-01-01 16:56:53 +0900 (Thu, 01 Jan 2009) | 2 lines add default include dir for Fedora/Red Hat (see SciPy ticket 817) ................ r6291 | cdavid | 2009-01-04 19:57:39 +0900 (Sun, 04 Jan 2009) | 1 line Do not import md5 on python >= 2.6; use hashlib instead. ................ r6292 | cdavid | 2009-01-04 20:08:16 +0900 (Sun, 04 Jan 2009) | 1 line Do not use popen* but subprocess.Popen instead. ................ r6293 | cdavid | 2009-01-04 21:03:29 +0900 (Sun, 04 Jan 2009) | 1 line Revert md5 change: hashlib.md5 is not a drop-in replacement for md5. ................ r6294 | pierregm | 2009-01-05 05:16:00 +0900 (Mon, 05 Jan 2009) | 2 lines * adapted default_fill_value for flexible datatype * fixed max/minimum_fill_value for flexible datatype ................ r6295 | stefan | 2009-01-06 06:51:18 +0900 (Tue, 06 Jan 2009) | 1 line Credit more developers. ................ r6296 | pierregm | 2009-01-06 07:52:21 +0900 (Tue, 06 Jan 2009) | 1 line *moved the printing templates out of MaskedArray.__repr__ ................ r6297 | stefan | 2009-01-06 19:09:00 +0900 (Tue, 06 Jan 2009) | 1 line Use new-style classes with multiple-inheritance to address bug in IronPython. ................ r6298 | pierregm | 2009-01-07 05:35:37 +0900 (Wed, 07 Jan 2009) | 1 line * Bugfix #961 ................ r6299 | pierregm | 2009-01-08 03:14:12 +0900 (Thu, 08 Jan 2009) | 1 line * Fixed iadd/isub/imul when the base array has no mask but the other array does ................ r6300 | pierregm | 2009-01-08 07:34:51 +0900 (Thu, 08 Jan 2009) | 3 lines * Renamed `torecords` to `toflex`, keeping `torecords` as an alias * Introduced `fromflex`, to reconstruct a masked_array from the output of `toflex` (can?\226?\128?\153t `use fromrecords` as it would clash with `numpy.ma.mrecords.fromrecords`) * Fixed a bug in MaskedBinaryOperation (#979) (wrong array broadcasting) ................ r6301 | cdavid | 2009-01-08 18:19:00 +0900 (Thu, 08 Jan 2009) | 1 line Avoid putting things into stderr when errors occurs in f2py wrappers; put all the info in the python error string instead. ................ r6302 | cdavid | 2009-01-09 00:11:32 +0900 (Fri, 09 Jan 2009) | 1 line Fix python 2.4 issue. ................ r6303 | chanley | 2009-01-09 01:30:01 +0900 (Fri, 09 Jan 2009) | 1 line Fix test_print.py function _test_locale_independance() since str(1.2) does not use the LC_NUMERIC locale to convert numbers. Fix from Mark Sienkiewicz. ................ r6304 | cdavid | 2009-01-09 04:22:21 +0900 (Fri, 09 Jan 2009) | 1 line Revert buggy test fix for locale independecce. ................ r6305 | pierregm | 2009-01-09 05:02:29 +0900 (Fri, 09 Jan 2009) | 2 lines * Add __eq__ and __ne__ for support of flexible arrays. * Fixed .filled for nested structures ................ r6306 | pierregm | 2009-01-09 06:51:04 +0900 (Fri, 09 Jan 2009) | 1 line * Remove a debugging print statement. ................ r6307 | jarrod.millman | 2009-01-09 11:14:35 +0900 (Fri, 09 Jan 2009) | 2 lines Updated license file ................ r6308 | cdavid | 2009-01-09 14:26:58 +0900 (Fri, 09 Jan 2009) | 1 line Tag formatting unit tests as known failures. ................ r6309 | jarrod.millman | 2009-01-09 17:59:29 +0900 (Fri, 09 Jan 2009) | 2 lines should be more reliable way to determine what bit platform ................ r6310 | jarrod.millman | 2009-01-09 18:14:17 +0900 (Fri, 09 Jan 2009) | 2 lines better default library paths for 64bit arch ................ r6311 | jarrod.millman | 2009-01-09 18:57:15 +0900 (Fri, 09 Jan 2009) | 2 lines simplification suggested by stefan ................ r6312 | jarrod.millman | 2009-01-09 19:02:09 +0900 (Fri, 09 Jan 2009) | 2 lines switch the order [lib,lib64] --> [lib64,lib] ................ r6313 | jarrod.millman | 2009-01-09 19:18:29 +0900 (Fri, 09 Jan 2009) | 2 lines removed unneeded import ................ r6314 | jarrod.millman | 2009-01-10 04:37:16 +0900 (Sat, 10 Jan 2009) | 2 lines can't use append an int to a string ................ r6315 | pierregm | 2009-01-10 05:18:12 +0900 (Sat, 10 Jan 2009) | 2 lines * Added flatten_structured_arrays * Fixed _get_recordarray for nested structures ................ r6316 | pierregm | 2009-01-10 10:53:05 +0900 (Sat, 10 Jan 2009) | 1 line * Add flatten_structured_array to the namespace ................ r6320 | pierregm | 2009-01-14 06:01:58 +0900 (Wed, 14 Jan 2009) | 9 lines numpy.ma.core: * introduced baseclass, sharedmask and hardmask as readonly properties of MaskedArray * docstrings update numpy.ma.extras: * docstring updates docs/reference * introduced maskedarray, maskedarray.baseclass, maskedarray.generic ................ r6321 | stefan | 2009-01-14 16:14:27 +0900 (Wed, 14 Jan 2009) | 2 lines Docstring: remove old floating point arithmetic, parallel execution and postponed import references. ................ r6322 | stefan | 2009-01-14 16:55:16 +0900 (Wed, 14 Jan 2009) | 1 line Fix printing of limits. ................ r6323 | stefan | 2009-01-14 16:56:10 +0900 (Wed, 14 Jan 2009) | 1 line Fix finfo to work on all instances, not just NumPy scalars. ................ r6324 | pierregm | 2009-01-17 09:15:15 +0900 (Sat, 17 Jan 2009) | 1 line * fixed _arraymethod.__call__ for structured arrays ................ r6325 | ptvirtan | 2009-01-18 06:24:13 +0900 (Sun, 18 Jan 2009) | 3 lines Make `trapz` accept 1-D `x` parameter for n-d `y`, even if axis != -1. Additional tests included. ................ r6326 | pierregm | 2009-01-19 17:53:53 +0900 (Mon, 19 Jan 2009) | 3 lines * renamed FlatIter to MaskedIterator * added __getitem__ to MaskedIterator ................ r6327 | pierregm | 2009-01-19 18:01:24 +0900 (Mon, 19 Jan 2009) | 2 lines * replace np.asarray by np.asanyarray in unique1d ................ r6328 | pierregm | 2009-01-19 18:04:20 +0900 (Mon, 19 Jan 2009) | 2 lines * add intersect1d, intersect1d_nu, setdiff1d, setmember1d, setxor1d, unique1d, union1d * use np.atleast1d instead of ma.atleast1d ................ r6329 | pierregm | 2009-01-20 06:22:52 +0900 (Tue, 20 Jan 2009) | 3 lines * lib : introduced _iotools * lib.io : introduced genfromtxt, ndfromtxt, mafromtxt, recfromtxt, recfromcsv. ................ r6330 | pierregm | 2009-01-22 14:37:36 +0900 (Thu, 22 Jan 2009) | 1 line * genfromtxt : if names is True, accept a line starting with a comment character as header. ................ r6331 | pierregm | 2009-01-22 14:40:25 +0900 (Thu, 22 Jan 2009) | 1 line * added recfunctions, a collection of utilities to manipulate structured arrays. ................ r6332 | pierregm | 2009-01-23 03:21:32 +0900 (Fri, 23 Jan 2009) | 2 lines * fixed a machine-dependent issue on default int ('<i4' on OS X, '<i8' on linux) ? * fixed an machine-dependent issue on argsort ? ................ r6333 | cdavid | 2009-01-24 17:02:14 +0900 (Sat, 24 Jan 2009) | 1 line Fix compilation error on 2.4. ................ r6334 | pierregm | 2009-01-27 06:04:26 +0900 (Tue, 27 Jan 2009) | 7 lines * _iotools.StringConverter : - add a _checked attribute to indicate whether the converter has been upgraded or not. - switched the default value for bool to False * io.genfromtxt: - fixed for the case where a whole column is masked: switch to bool or the common dtype (if needed) ................ r6335 | pierregm | 2009-01-27 11:46:26 +0900 (Tue, 27 Jan 2009) | 1 line * prevent MaskedBinaryOperation and DomainedBinaryOperation to shrink the mask of the output when at least one of the inputs has a mask full of False ................ r6336 | matthew.brett@gmail.com | 2009-01-30 09:26:44 +0900 (Fri, 30 Jan 2009) | 1 line New docstrings for byteorder and newbyteorder() ................ r6337 | pierregm | 2009-02-02 14:20:17 +0900 (Mon, 02 Feb 2009) | 2 lines * Added a 'autoconvert' option to stack_arrays. * Fixed 'stack_arrays' to work with fields with titles. ................ r6338 | pierregm | 2009-02-04 02:11:44 +0900 (Wed, 04 Feb 2009) | 1 line * Make sure that StringConverter.update sets the type to object if it can't define it. ................ r6339 | pierregm | 2009-02-05 05:52:36 +0900 (Thu, 05 Feb 2009) | 2 lines * test__iotools : prevent test_upgrademapper if dateutil is not installed * MaskedArray.__rmul__ : switch to multiply(self, other) ................ r6340 | pierregm | 2009-02-05 06:53:05 +0900 (Thu, 05 Feb 2009) | 1 line test_upgrademapper : got rid of the dateutil import ................ r6341 | pierregm | 2009-02-05 13:31:51 +0900 (Thu, 05 Feb 2009) | 2 lines * genfromtxt : Fixed when a dtype involving objects is explicitly given. Raise a NotImplementedError if the dtype is nested. * _iotools : make sure StringConverter gets properly initiated when a function returning a np.object is used as input parameter. ................ r6342 | alan.mcintyre | 2009-02-06 05:11:40 +0900 (Fri, 06 Feb 2009) | 6 lines Issue #957: - Fix problems with test decorators when used on test generators. - The skip/fail arguments for skipif and knownfailureif can now be either a bool or a callable that returns a bool. - Added tests for the test decorators. ................ r6343 | ptvirtan | 2009-02-06 09:27:08 +0900 (Fri, 06 Feb 2009) | 1 line doc/numpydoc: work better together with Sphinx's config option ................ r6344 | ptvirtan | 2009-02-06 09:51:41 +0900 (Fri, 06 Feb 2009) | 1 line doc: Move maskedarray docs upward in TOC ................ r6345 | oliphant | 2009-02-06 15:25:50 +0900 (Fri, 06 Feb 2009) | 1 line Avoid re-creating the sequence when there is only one field in the regular expression. ................ r6346 | oliphant | 2009-02-06 15:31:11 +0900 (Fri, 06 Feb 2009) | 1 line Removed an unneccessary return statement in a unit test. ................ r6347 | pearu | 2009-02-06 23:36:58 +0900 (Fri, 06 Feb 2009) | 1 line Fix a bug: python system_info.py failed because _pkg_config_info defined section to be None. ................ r6348 | pearu | 2009-02-06 23:38:57 +0900 (Fri, 06 Feb 2009) | 1 line Fix another bug, see last commit. ................ r6349 | pierregm | 2009-02-07 18:19:12 +0900 (Sat, 07 Feb 2009) | 2 lines MaskedArray.resize : systematically raise a TypeError exception, as a masked array never owns its data MaskedIterator : fixed to allow .flat on masked matrices ................ r6350 | pierregm | 2009-02-08 03:51:31 +0900 (Sun, 08 Feb 2009) | 1 line ................ r6351 | ptvirtan | 2009-02-10 05:18:08 +0900 (Tue, 10 Feb 2009) | 1 line Fix #955: fix errobj leak in scalarmath floating point error handling ................ r6352 | pierregm | 2009-02-10 09:42:40 +0900 (Tue, 10 Feb 2009) | 1 line * prevent modifications to the mask to be back-propagated w/ __array_wrap__ ................ r6354 | cdavid | 2009-02-10 19:44:01 +0900 (Tue, 10 Feb 2009) | 1 line Fix hyphen (patch from debian package). ................ r6356 | pierregm | 2009-02-11 10:51:28 +0900 (Wed, 11 Feb 2009) | 1 line * MaskedArray.__array_wrap__ : forces the domain (if any) to a ndarray (fill with True) ................ r6358 | oliphant | 2009-02-12 13:22:03 +0900 (Thu, 12 Feb 2009) | 1 line Add multiple-field access by making a copy of the array and filling with the selected fields. ................ r6359 | stefan | 2009-02-12 14:44:07 +0900 (Thu, 12 Feb 2009) | 2 lines Trust user's specification of MACOSX_DEPLOYMENT_TARGET [patch by Brian Granger]. ................ r6360 | cdavid | 2009-02-14 23:54:26 +0900 (Sat, 14 Feb 2009) | 1 line Merge fix_float_format branch into the trunk. ................ r6361 | cdavid | 2009-02-15 00:02:39 +0900 (Sun, 15 Feb 2009) | 1 line Fix typo in multiarray tests. ................ r6362 | cdavid | 2009-02-15 00:03:22 +0900 (Sun, 15 Feb 2009) | 1 line Remove leftover in TestIO. ................ r6363 | cdavid | 2009-02-15 02:03:51 +0900 (Sun, 15 Feb 2009) | 1 line Include C99 math compatbility layer in multiarray - isnan and co needed by numpyos.c ................ r6364 | ptvirtan | 2009-02-15 07:09:26 +0900 (Sun, 15 Feb 2009) | 1 line More add_newdocs entries, and make add_newdoc capable of adding docs also to normal Python objects. ................ r6365 | ptvirtan | 2009-02-15 07:10:24 +0900 (Sun, 15 Feb 2009) | 1 line Move (un)packbits docstrings to add_newdocs.py. Fix typos. ................ r6366 | ptvirtan | 2009-02-15 07:11:19 +0900 (Sun, 15 Feb 2009) | 1 line Document constants in numpy.doc.constants ................ r6367 | ptvirtan | 2009-02-15 07:38:32 +0900 (Sun, 15 Feb 2009) | 1 line Move numpy.lib __doc__ back to info.py; was moved to __init__.py by mistake. ................ r6368 | pierregm | 2009-02-15 07:42:29 +0900 (Sun, 15 Feb 2009) | 1 line * genfromtxt : fixed case when using explicit converters and explicit dtype. ................ r6370 | ptvirtan | 2009-02-16 00:44:47 +0900 (Mon, 16 Feb 2009) | 1 line sphinxext: clean up plot directive, and merge some features from matplotlib ................ r6371 | charris | 2009-02-18 06:19:10 +0900 (Wed, 18 Feb 2009) | 2 lines Coding style cleanups. ................ r6372 | cdavid | 2009-02-18 14:06:57 +0900 (Wed, 18 Feb 2009) | 1 line Fix some const issues in NumPyOs_ascii_strtod. ................ r6373 | charris | 2009-02-18 14:36:35 +0900 (Wed, 18 Feb 2009) | 1 line Coding style cleanups. ................ r6398 | charris | 2009-02-19 05:54:52 +0900 (Thu, 19 Feb 2009) | 2 lines Coding style cleanups. ................ r6399 | charris | 2009-02-19 09:45:14 +0900 (Thu, 19 Feb 2009) | 2 lines Coding style cleanups. ................ r6400 | charris | 2009-02-19 13:58:23 +0900 (Thu, 19 Feb 2009) | 1 line Coding style cleanups. ................ r6410 | cdavid | 2009-02-19 19:05:28 +0900 (Thu, 19 Feb 2009) | 1 line Tag known failure on win32. ................ r6421 | stefan | 2009-02-20 04:28:08 +0900 (Fri, 20 Feb 2009) | 1 line Fix tests using strptime to be Python 2.4 compatible. ................ r6422 | charris | 2009-02-20 08:25:01 +0900 (Fri, 20 Feb 2009) | 2 lines Coding style cleanups. ................ r6423 | charris | 2009-02-20 12:40:53 +0900 (Fri, 20 Feb 2009) | 1 line Coding style cleanups. ................ r6424 | cdavid | 2009-02-20 22:30:20 +0900 (Fri, 20 Feb 2009) | 1 line Unhelpful message for compaq fortran compiler. ................
Diffstat (limited to 'numpy/ma/extras.py')
-rw-r--r--numpy/ma/extras.py362
1 files changed, 261 insertions, 101 deletions
diff --git a/numpy/ma/extras.py b/numpy/ma/extras.py
index cf80180e4..b2f06ea6c 100644
--- a/numpy/ma/extras.py
+++ b/numpy/ma/extras.py
@@ -19,11 +19,14 @@ __all__ = ['apply_along_axis', 'atleast_1d', 'atleast_2d', 'atleast_3d',
'ediff1d',
'flatnotmasked_contiguous', 'flatnotmasked_edges',
'hsplit', 'hstack',
+ 'intersect1d', 'intersect1d_nu',
'mask_cols', 'mask_rowcols', 'mask_rows', 'masked_all',
'masked_all_like', 'median', 'mr_',
'notmasked_contiguous', 'notmasked_edges',
'polyfit',
'row_stack',
+ 'setdiff1d', 'setmember1d', 'setxor1d',
+ 'unique1d', 'union1d',
'vander', 'vstack',
]
@@ -45,22 +48,19 @@ from numpy.linalg import lstsq
#...............................................................................
def issequence(seq):
"""Is seq a sequence (ndarray, list or tuple)?"""
- if isinstance(seq, ndarray):
- return True
- elif isinstance(seq, tuple):
- return True
- elif isinstance(seq, list):
+ if isinstance(seq, (ndarray, tuple, list)):
return True
return False
def count_masked(arr, axis=None):
- """Count the number of masked elements along the given axis.
+ """
+ Count the number of masked elements along the given axis.
Parameters
----------
- axis : int, optional
- Axis along which to count.
- If None (default), a flattened version of the array is used.
+ axis : int, optional
+ Axis along which to count.
+ If None (default), a flattened version of the array is used.
"""
m = getmaskarray(arr)
@@ -136,9 +136,12 @@ class _fromnxfunction:
res.append(masked_array(_d, mask=_m))
return res
-atleast_1d = _fromnxfunction('atleast_1d')
-atleast_2d = _fromnxfunction('atleast_2d')
-atleast_3d = _fromnxfunction('atleast_3d')
+#atleast_1d = _fromnxfunction('atleast_1d')
+#atleast_2d = _fromnxfunction('atleast_2d')
+#atleast_3d = _fromnxfunction('atleast_3d')
+atleast_1d = np.atleast_1d
+atleast_2d = np.atleast_2d
+atleast_3d = np.atleast_3d
vstack = row_stack = _fromnxfunction('vstack')
hstack = _fromnxfunction('hstack')
@@ -252,7 +255,8 @@ apply_along_axis.__doc__ = np.apply_along_axis.__doc__
def average(a, axis=None, weights=None, returned=False):
- """Average the array over the given axis.
+ """
+ Average the array over the given axis.
Parameters
----------
@@ -440,10 +444,10 @@ def median(a, axis=None, out=None, overwrite_input=False):
#..............................................................................
def compress_rowcols(x, axis=None):
"""
- Suppress the rows and/or columns of a 2D array that contains
+ Suppress the rows and/or columns of a 2D array that contain
masked values.
- The suppression behavior is selected with the `axis`parameter.
+ The suppression behavior is selected with the `axis` parameter.
- If axis is None, rows and columns are suppressed.
- If axis is 0, only rows are suppressed.
@@ -482,13 +486,15 @@ def compress_rowcols(x, axis=None):
return x._data[idxr][:,idxc]
def compress_rows(a):
- """Suppress whole rows of a 2D array that contain masked values.
+ """
+ Suppress whole rows of a 2D array that contain masked values.
"""
return compress_rowcols(a, 0)
def compress_cols(a):
- """Suppress whole columnss of a 2D array that contain masked values.
+ """
+ Suppress whole columns of a 2D array that contain masked values.
"""
return compress_rowcols(a, 1)
@@ -530,30 +536,35 @@ def mask_rowcols(a, axis=None):
return a
def mask_rows(a, axis=None):
- """Mask whole rows of a 2D array that contain masked values.
+ """
+ Mask whole rows of a 2D array that contain masked values.
Parameters
----------
- axis : int, optional
- Axis along which to perform the operation.
- If None, applies to a flattened version of the array.
+ axis : int, optional
+ Axis along which to perform the operation.
+ If None, applies to a flattened version of the array.
+
"""
return mask_rowcols(a, 0)
def mask_cols(a, axis=None):
- """Mask whole columns of a 2D array that contain masked values.
+ """
+ Mask whole columns of a 2D array that contain masked values.
Parameters
----------
- axis : int, optional
- Axis along which to perform the operation.
- If None, applies to a flattened version of the array.
+ axis : int, optional
+ Axis along which to perform the operation.
+ If None, applies to a flattened version of the array.
+
"""
return mask_rowcols(a, 1)
def dot(a,b, strict=False):
- """Return the dot product of two 2D masked arrays a and b.
+ """
+ Return the dot product of two 2D masked arrays a and b.
Like the generic numpy equivalent, the product sum is over the last
dimension of a and the second-to-last dimension of b. If strict is True,
@@ -582,72 +593,211 @@ def dot(a,b, strict=False):
m = ~np.dot(am, bm)
return masked_array(d, mask=m)
-#...............................................................................
-def ediff1d(array, to_end=None, to_begin=None):
- """Return the differences between consecutive elements of an
- array, possibly with prefixed and/or appended values.
+#####--------------------------------------------------------------------------
+#---- --- arraysetops ---
+#####--------------------------------------------------------------------------
- Parameters
- ----------
- array : {array}
- Input array, will be flattened before the difference is taken.
- to_end : {number}, optional
- If provided, this number will be tacked onto the end of the returned
- differences.
- to_begin : {number}, optional
- If provided, this number will be taked onto the beginning of the
- returned differences.
+def ediff1d(arr, to_end=None, to_begin=None):
+ """
+ Computes the differences between consecutive elements of an array.
+
+ This function is the equivalent of `numpy.ediff1d` that takes masked
+ values into account.
+
+ See Also
+ --------
+ numpy.eddif1d : equivalent function for ndarrays.
Returns
-------
- ed : {array}
- The differences. Loosely, this will be (ary[1:] - ary[:-1]).
-
+ output : MaskedArray
+
"""
- a = masked_array(array, copy=True)
- if a.ndim > 1:
- a.reshape((a.size,))
- (d, m, n) = (a._data, a._mask, a.size-1)
- dd = d[1:]-d[:-1]
- if m is nomask:
- dm = nomask
- else:
- dm = m[1:]-m[:-1]
+ arr = ma.asanyarray(arr).flat
+ ed = arr[1:] - arr[:-1]
+ arrays = [ed]
#
+ if to_begin is not None:
+ arrays.insert(0, to_begin)
if to_end is not None:
- to_end = asarray(to_end)
- nend = to_end.size
- if to_begin is not None:
- to_begin = asarray(to_begin)
- nbegin = to_begin.size
- r_data = np.empty((n+nend+nbegin,), dtype=a.dtype)
- r_mask = np.zeros((n+nend+nbegin,), dtype=bool)
- r_data[:nbegin] = to_begin._data
- r_mask[:nbegin] = to_begin._mask
- r_data[nbegin:-nend] = dd
- r_mask[nbegin:-nend] = dm
- else:
- r_data = np.empty((n+nend,), dtype=a.dtype)
- r_mask = np.zeros((n+nend,), dtype=bool)
- r_data[:-nend] = dd
- r_mask[:-nend] = dm
- r_data[-nend:] = to_end._data
- r_mask[-nend:] = to_end._mask
+ arrays.append(to_end)
+ #
+ if len(arrays) != 1:
+ # We'll save ourselves a copy of a potentially large array in the common
+ # case where neither to_begin or to_end was given.
+ ed = hstack(arrays)
+ #
+ return ed
+
+
+def unique1d(ar1, return_index=False, return_inverse=False):
+ """
+ Finds the unique elements of an array.
+
+ Masked values are considered the same element (masked).
+
+ The output array is always a MaskedArray.
+
+ See Also
+ --------
+ np.unique1d : equivalent function for ndarrays.
+ """
+ output = np.unique1d(ar1,
+ return_index=return_index,
+ return_inverse=return_inverse)
+ if isinstance(output, tuple):
+ output = list(output)
+ output[0] = output[0].view(MaskedArray)
+ output = tuple(output)
+ else:
+ output = output.view(MaskedArray)
+ return output
+
+
+def intersect1d(ar1, ar2):
+ """
+ Returns the repeated or unique elements belonging to the two arrays.
+
+ Masked values are assumed equals one to the other.
+ The output is always a masked array
+
+ See Also
+ --------
+ numpy.intersect1d : equivalent function for ndarrays.
+
+ Examples
+ --------
+ >>> x = array([1, 3, 3, 3], mask=[0, 0, 0, 1])
+ >>> y = array([3, 1, 1, 1], mask=[0, 0, 0, 1])
+ >>> intersect1d(x, y)
+ masked_array(data = [1 1 3 3 --],
+ mask = [False False False False True],
+ fill_value = 999999)
+ """
+ aux = ma.concatenate((ar1,ar2))
+ aux.sort()
+ return aux[aux[1:] == aux[:-1]]
+
+
+
+def intersect1d_nu(ar1, ar2):
+ """
+ Returns the unique elements common to both arrays.
+
+ Masked values are considered equal one to the other.
+ The output is always a masked array.
+
+ See Also
+ --------
+ intersect1d : Returns repeated or unique common elements.
+ numpy.intersect1d_nu : equivalent function for ndarrays.
+
+ Examples
+ --------
+ >>> x = array([1, 3, 3, 3], mask=[0, 0, 0, 1])
+ >>> y = array([3, 1, 1, 1], mask=[0, 0, 0, 1])
+ >>> intersect1d_nu(x, y)
+ masked_array(data = [1 3 --],
+ mask = [False False True],
+ fill_value = 999999)
+
+ """
+ # Might be faster than unique1d( intersect1d( ar1, ar2 ) )?
+ aux = ma.concatenate((unique1d(ar1), unique1d(ar2)))
+ aux.sort()
+ return aux[aux[1:] == aux[:-1]]
+
+
+
+def setxor1d(ar1, ar2):
+ """
+ Set exclusive-or of 1D arrays with unique elements.
+
+ See Also
+ --------
+ numpy.setxor1d : equivalent function for ndarrays
+
+ """
+ aux = ma.concatenate((ar1, ar2))
+ if aux.size == 0:
+ return aux
+ aux.sort()
+ auxf = aux.filled()
+# flag = ediff1d( aux, to_end = 1, to_begin = 1 ) == 0
+ flag = ma.concatenate(([True], (auxf[1:] != auxf[:-1]), [True]))
+# flag2 = ediff1d( flag ) == 0
+ flag2 = (flag[1:] == flag[:-1])
+ return aux[flag2]
+
+
+def setmember1d(ar1, ar2):
+ """
+ Return a boolean array set True where first element is in second array.
+
+ See Also
+ --------
+ numpy.setmember1d : equivalent function for ndarrays.
+
+ """
+ ar1 = ma.asanyarray(ar1)
+ ar2 = ma.asanyarray( ar2 )
+ ar = ma.concatenate((ar1, ar2 ))
+ b1 = ma.zeros(ar1.shape, dtype = np.int8)
+ b2 = ma.ones(ar2.shape, dtype = np.int8)
+ tt = ma.concatenate((b1, b2))
+
+ # We need this to be a stable sort, so always use 'mergesort' here. The
+ # values from the first array should always come before the values from the
+ # second array.
+ perm = ar.argsort(kind='mergesort')
+ aux = ar[perm]
+ aux2 = tt[perm]
+# flag = ediff1d( aux, 1 ) == 0
+ flag = ma.concatenate((aux[1:] == aux[:-1], [False]))
+ ii = ma.where( flag * aux2 )[0]
+ aux = perm[ii+1]
+ perm[ii+1] = perm[ii]
+ perm[ii] = aux
#
- elif to_begin is not None:
- to_begin = asarray(to_begin)
- nbegin = to_begin.size
- r_data = np.empty((n+nbegin,), dtype=a.dtype)
- r_mask = np.zeros((n+nbegin,), dtype=bool)
- r_data[:nbegin] = to_begin._data
- r_mask[:nbegin] = to_begin._mask
- r_data[nbegin:] = dd
- r_mask[nbegin:] = dm
+ indx = perm.argsort(kind='mergesort')[:len( ar1 )]
#
+ return flag[indx]
+
+
+def union1d(ar1, ar2):
+ """
+ Union of 1D arrays with unique elements.
+
+ See also
+ --------
+ numpy.union1d : equivalent function for ndarrays.
+
+ """
+ return unique1d(ma.concatenate((ar1, ar2)))
+
+
+def setdiff1d(ar1, ar2):
+ """
+ Set difference of 1D arrays with unique elements.
+
+ See Also
+ --------
+ numpy.setdiff1d : equivalent function for ndarrays
+
+ """
+ aux = setmember1d(ar1,ar2)
+ if aux.size == 0:
+ return aux
else:
- r_data = dd
- r_mask = dm
- return masked_array(r_data, mask=r_mask)
+ return ma.asarray(ar1)[aux == 0]
+
+
+
+#####--------------------------------------------------------------------------
+#---- --- Covariance ---
+#####--------------------------------------------------------------------------
+
+
def _covhelper(x, y=None, rowvar=True, allow_masked=True):
@@ -747,7 +897,8 @@ def cov(x, y=None, rowvar=True, bias=False, allow_masked=True):
def corrcoef(x, y=None, rowvar=True, bias=False, allow_masked=True):
- """The correlation coefficients formed from the array x, where the
+ """
+ The correlation coefficients formed from the array x, where the
rows are the observations, and the columns are variables.
corrcoef(x,y) where x and y are 1d arrays is the same as
@@ -818,7 +969,8 @@ def corrcoef(x, y=None, rowvar=True, bias=False, allow_masked=True):
#####--------------------------------------------------------------------------
class MAxisConcatenator(AxisConcatenator):
- """Translate slice objects to concatenation along an axis.
+ """
+ Translate slice objects to concatenation along an axis.
"""
@@ -877,11 +1029,13 @@ class MAxisConcatenator(AxisConcatenator):
return self._retval(res)
class mr_class(MAxisConcatenator):
- """Translate slice objects to concatenation along the first axis.
+ """
+ Translate slice objects to concatenation along the first axis.
- For example:
- >>> np.ma.mr_[np.ma.array([1,2,3]), 0, 0, np.ma.array([4,5,6])]
- array([1, 2, 3, 0, 0, 4, 5, 6])
+ Examples
+ --------
+ >>> np.ma.mr_[np.ma.array([1,2,3]), 0, 0, np.ma.array([4,5,6])]
+ array([1, 2, 3, 0, 0, 4, 5, 6])
"""
def __init__(self):
@@ -894,7 +1048,8 @@ mr_ = mr_class()
#####--------------------------------------------------------------------------
def flatnotmasked_edges(a):
- """Find the indices of the first and last not masked values in a
+ """
+ Find the indices of the first and last not masked values in a
1D masked array. If all values are masked, returns None.
"""
@@ -907,8 +1062,10 @@ def flatnotmasked_edges(a):
else:
return None
+
def notmasked_edges(a, axis=None):
- """Find the indices of the first and last not masked values along
+ """
+ Find the indices of the first and last not masked values along
the given axis in a masked array.
If all values are masked, return None. Otherwise, return a list
@@ -917,9 +1074,10 @@ def notmasked_edges(a, axis=None):
Parameters
----------
- axis : int, optional
- Axis along which to perform the operation.
- If None, applies to a flattened version of the array.
+ axis : int, optional
+ Axis along which to perform the operation.
+ If None, applies to a flattened version of the array.
+
"""
a = asarray(a)
if axis is None or a.ndim == 1:
@@ -929,8 +1087,10 @@ def notmasked_edges(a, axis=None):
return [tuple([idx[i].min(axis).compressed() for i in range(a.ndim)]),
tuple([idx[i].max(axis).compressed() for i in range(a.ndim)]),]
+
def flatnotmasked_contiguous(a):
- """Find contiguous unmasked data in a flattened masked array.
+ """
+ Find contiguous unmasked data in a flattened masked array.
Return a sorted sequence of slices (start index, end index).
@@ -950,22 +1110,22 @@ def flatnotmasked_contiguous(a):
return result
def notmasked_contiguous(a, axis=None):
- """Find contiguous unmasked data in a masked array along the given
- axis.
+ """
+ Find contiguous unmasked data in a masked array along the given axis.
Parameters
----------
- axis : int, optional
- Axis along which to perform the operation.
- If None, applies to a flattened version of the array.
+ axis : int, optional
+ Axis along which to perform the operation.
+ If None, applies to a flattened version of the array.
Returns
-------
- A sorted sequence of slices (start index, end index).
+ A sorted sequence of slices (start index, end index).
Notes
-----
- Only accepts 2D arrays at most.
+ Only accepts 2D arrays at most.
"""
a = asarray(a)