Using numpy.ma.masked_array is probably the most elegant way:
>>> a = np.array([[16,32,49,80,85],[2,57,59,70,77],[9,11,30,36,64]])
>>> np.ma.masked_array(a, a < 46)
masked_array(
data=[[--, --, 49, 80, 85],
[--, 57, 59, 70, 77],
[--, --, --, --, 64]],
mask=[[ True, True, False, False, False],
[ True, False, False, False, False],
[ True, True, True, True, False]],
fill_value=999999)
>>> np.ma.masked_array(a, a < 46).argmin() % a.shape[1]
2
I modulo the result of a.shape[1] to get the exact number of columns, because argmin returns the position of the minimum value in the flattened array.