Welcome, guest | Sign In | My Account | Store | Cart

returns the coordinates of a numpy array given the index and the shape. A first_index_et function is given as example code

Python, 49 lines
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49``` ```# -*- coding: utf-8 -*- """ Created on Fri Oct 05 13:32:06 2012 @author: Garrett Berg """ import numpy as np import itertools import math def index_to_coords(index, shape): '''convert index to coordinates given the shape''' coords = [] for i in xrange(1, len(shape)): divisor = int(np.product(shape[i:])) value = index//divisor coords.append(value) index -= value * divisor coords.append(index) return tuple(coords) def first_coords_et(data_matrix, value, start = 0): '''the first coordinates that are equal to the value''' index = first_index_et(data_matrix.flatten(), value, start) shape = data_matrix.shape return index_to_coords(index, shape) def first_index_et(data_list, value, start = 0): data_list = itertools.islice(data_list, start, None) '''same as data_list.index(value), except with exception handling Also finds 'nan' values and works with numpy arrays -- quickly!''' try: if type(value) == float and math.isnan(value): floats = (float, np.float64, np.float32, np.float96) isnan = math.isnan return next(data[0] for data in enumerate(data_list) if (type(data[1]) in floats and isnan(data[1]))) + start else: return next(data[0] for data in enumerate(data_list) if data[1] == value) + start except (ValueError, StopIteration): return - 1 if __name__ == '__main__': ab = np.arange(0, 30000) ab.shape = (20, 20, 30000/(20*20)) value = ab[7][12][0] print first_coords_et(ab, value) # (7, 12, 0) ```
 Created by Garrett on Tue, 23 Oct 2012 (MIT)