On Sun, Nov 14, 2010 at 21:55, <[email protected]> wrote: > Dear list, > > I thought I understood broadcasting, but now I'm not so sure. > > I've simplified as much as I can, so here goes. I have two input arrays of > shape (1, 3, 1). I want to select elements from one or other of the input > arrays depending on whether the corresponding element of a third array > exceeds a threshold. My simplest code is: > --------- > import numpy as np > a = np.array([[[1],[2],[3]]]) > b = np.array([[[4],[5],[6]]]) > > x = np.array([[[1],[1],[2]]]) > > result = np.where(x > 1.5, a, b) > ---------- > and works as expected. > > Now, my understanding of broadcasting is that if the 'x' array is defined as > np.array([[[1]]]) then broadcasting will ensure the result array will contain > elements from array 'b'. That is, the program will behave as if 'x' had > shape of (1,3,1) with three elements each of value 1. I tested that and got > the result I expected. > > However, when I ran the test on another machine, it failed with an "array > dimensions must agree" error. On the failing machine numpy.__version__ > returns '1.2.0'. Machines on which the broadcasting works as I expect I see > '1.3.0' (or later) in numpy.__version__. > > Have broadcast rules changed since 1.2.0? Or maybe I just don't understand > broadcasting?
I'm not certain, but earlier versions of numpy.where() may not have broadcasted their arguments. Not every function taking arrays as arguments does broadcasting. -- Robert Kern "I have come to believe that the whole world is an enigma, a harmless enigma that is made terrible by our own mad attempt to interpret it as though it had an underlying truth." -- Umberto Eco _______________________________________________ NumPy-Discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
