From: Travis E. O. <oli...@ee...> - 2004-02-02 16:32:04
|
Vineet Jain wrote: > I'm using the Numeric arrays for financial data elements. I'm interfacing > with an external c library which does not support invalid elements. To get > around this I maintain a separate mask array in my python class which > denotes which elements are valid. I then use the compress function with the > mask array to get an array with valid elements which I pass to the c > function. > > What I would like to do is: > > putmask(full_return_value, my_mask, return_value) > > where return_value is treated like a list so that every 1 that is found in > my_mask the next element in return_value is used. Is their anything that > matches this? > There are functions in SciPy to handle exactly this situation. >>> from scipy import * >>> info(insert) insert(arr, mask, vals) Similar to putmask arr[mask] = vals but 1d array vals has the same number of elements as the non-zero values of mask. Inverse of extract. >>> info(extract) extract(condition, arr) Elements of ravel(condition) where ravel(condition) is true (1-d) Equivalent of compress(ravel(condition), ravel(arr)) Thus, for your problem I would do: financial_data = [10, 11, 22, 33, INVALID, INVALID, 44, 55] my_mask = [1, 1, 1, 1, 0, 0, 1, 1] compressed_data = extract(my_mask, financial_data) return_value = some_c_function(compressed_data) insert(financial_data, my_mask, return_value) These functions are in scipy_base and so you only need to install scipy_base to get them. Best regards, -Travis Oliphant |