@@ -1679,148 +1679,6 @@ def rec_summarize(r, summaryfuncs):
16791679 return np .rec .fromarrays (arrays , names = names )
16801680
16811681
1682- @cbook .deprecated ("2.2" )
1683- def rec_join (key , r1 , r2 , jointype = 'inner' , defaults = None , r1postfix = '1' ,
1684- r2postfix = '2' ):
1685- """
1686- Join record arrays *r1* and *r2* on *key*; *key* is a tuple of
1687- field names -- if *key* is a string it is assumed to be a single
1688- attribute name. If *r1* and *r2* have equal values on all the keys
1689- in the *key* tuple, then their fields will be merged into a new
1690- record array containing the intersection of the fields of *r1* and
1691- *r2*.
1692-
1693- *r1* (also *r2*) must not have any duplicate keys.
1694-
1695- The *jointype* keyword can be 'inner', 'outer', 'leftouter'. To
1696- do a rightouter join just reverse *r1* and *r2*.
1697-
1698- The *defaults* keyword is a dictionary filled with
1699- ``{column_name:default_value}`` pairs.
1700-
1701- The keywords *r1postfix* and *r2postfix* are postfixed to column names
1702- (other than keys) that are both in *r1* and *r2*.
1703- """
1704-
1705- if isinstance (key , str ):
1706- key = (key , )
1707-
1708- for name in key :
1709- if name not in r1 .dtype .names :
1710- raise ValueError ('r1 does not have key field %s' % name )
1711- if name not in r2 .dtype .names :
1712- raise ValueError ('r2 does not have key field %s' % name )
1713-
1714- def makekey (row ):
1715- return tuple ([row [name ] for name in key ])
1716-
1717- r1d = {makekey (row ): i for i , row in enumerate (r1 )}
1718- r2d = {makekey (row ): i for i , row in enumerate (r2 )}
1719-
1720- r1keys = set (r1d )
1721- r2keys = set (r2d )
1722-
1723- common_keys = r1keys & r2keys
1724-
1725- r1ind = np .array ([r1d [k ] for k in common_keys ])
1726- r2ind = np .array ([r2d [k ] for k in common_keys ])
1727-
1728- common_len = len (common_keys )
1729- left_len = right_len = 0
1730- if jointype == "outer" or jointype == "leftouter" :
1731- left_keys = r1keys .difference (r2keys )
1732- left_ind = np .array ([r1d [k ] for k in left_keys ])
1733- left_len = len (left_ind )
1734- if jointype == "outer" :
1735- right_keys = r2keys .difference (r1keys )
1736- right_ind = np .array ([r2d [k ] for k in right_keys ])
1737- right_len = len (right_ind )
1738-
1739- def key_desc (name ):
1740- '''
1741- if name is a string key, use the larger size of r1 or r2 before
1742- merging
1743- '''
1744- dt1 = r1 .dtype [name ]
1745- if dt1 .type != np .string_ :
1746- return (name , dt1 .descr [0 ][1 ])
1747-
1748- dt2 = r2 .dtype [name ]
1749- if dt1 != dt2 :
1750- raise ValueError ("The '{}' fields in arrays 'r1' and 'r2' must "
1751- "have the same dtype" .format (name ))
1752- if dt1 .num > dt2 .num :
1753- return (name , dt1 .descr [0 ][1 ])
1754- else :
1755- return (name , dt2 .descr [0 ][1 ])
1756-
1757- keydesc = [key_desc (name ) for name in key ]
1758-
1759- def mapped_r1field (name ):
1760- """
1761- The column name in *newrec* that corresponds to the column in *r1*.
1762- """
1763- if name in key or name not in r2 .dtype .names :
1764- return name
1765- else :
1766- return name + r1postfix
1767-
1768- def mapped_r2field (name ):
1769- """
1770- The column name in *newrec* that corresponds to the column in *r2*.
1771- """
1772- if name in key or name not in r1 .dtype .names :
1773- return name
1774- else :
1775- return name + r2postfix
1776-
1777- r1desc = [(mapped_r1field (desc [0 ]), desc [1 ]) for desc in r1 .dtype .descr
1778- if desc [0 ] not in key ]
1779- r2desc = [(mapped_r2field (desc [0 ]), desc [1 ]) for desc in r2 .dtype .descr
1780- if desc [0 ] not in key ]
1781- all_dtypes = keydesc + r1desc + r2desc
1782- newdtype = np .dtype (all_dtypes )
1783- newrec = np .recarray ((common_len + left_len + right_len ,), dtype = newdtype )
1784-
1785- if defaults is not None :
1786- for thiskey in defaults :
1787- if thiskey not in newdtype .names :
1788- warnings .warn ('rec_join defaults key="%s" not in new dtype '
1789- 'names "%s"' % (thiskey , newdtype .names ))
1790-
1791- for name in newdtype .names :
1792- dt = newdtype [name ]
1793- if dt .kind in ('f' , 'i' ):
1794- newrec [name ] = 0
1795-
1796- if jointype != 'inner' and defaults is not None :
1797- # fill in the defaults enmasse
1798- newrec_fields = list (newrec .dtype .fields )
1799- for k , v in defaults .items ():
1800- if k in newrec_fields :
1801- newrec [k ] = v
1802-
1803- for field in r1 .dtype .names :
1804- newfield = mapped_r1field (field )
1805- if common_len :
1806- newrec [newfield ][:common_len ] = r1 [field ][r1ind ]
1807- if (jointype == "outer" or jointype == "leftouter" ) and left_len :
1808- newrec [newfield ][common_len :(common_len + left_len )] = (
1809- r1 [field ][left_ind ]
1810- )
1811-
1812- for field in r2 .dtype .names :
1813- newfield = mapped_r2field (field )
1814- if field not in key and common_len :
1815- newrec [newfield ][:common_len ] = r2 [field ][r2ind ]
1816- if jointype == "outer" and right_len :
1817- newrec [newfield ][- right_len :] = r2 [field ][right_ind ]
1818-
1819- newrec .sort (order = key )
1820-
1821- return newrec
1822-
1823-
18241682@cbook .deprecated ("2.2" )
18251683def csv2rec (fname , comments = '#' , skiprows = 0 , checkrows = 0 , delimiter = ',' ,
18261684 converterd = None , names = None , missing = '' , missingd = None ,
0 commit comments