Re: [Numpy-discussion] broadcasting question

2012-08-30 Thread Benjamin Root
On Thursday, August 30, 2012, Neal Becker wrote:

 I think this should be simple, but I'm drawing a blank

 I have 2 2d matrixes

 Matrix A has indexes (i, symbol)
 Matrix B has indexes (state, symbol)

 I combined them into a 3d matrix:

 C = A[:,newaxis,:] + B[newaxis,:,:]
 where C has indexes (i, state, symbol)

 That works fine.

 Now suppose I want to omit B (for debug), like:

 C = A[:,newaxis,:]

 In other words, all I want is to add a dimension into A and force it to
 broadcast along that axis.  How do I do that?


np.tile would help you there, I think.


Ben Root
___
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion


Re: [Numpy-discussion] broadcasting question

2012-08-30 Thread Robert Kern
On Thu, Aug 30, 2012 at 12:49 PM, Neal Becker ndbeck...@gmail.com wrote:
 I think this should be simple, but I'm drawing a blank

 I have 2 2d matrixes

 Matrix A has indexes (i, symbol)
 Matrix B has indexes (state, symbol)

 I combined them into a 3d matrix:

 C = A[:,newaxis,:] + B[newaxis,:,:]
 where C has indexes (i, state, symbol)

 That works fine.

 Now suppose I want to omit B (for debug), like:

 C = A[:,newaxis,:]

 In other words, all I want is to add a dimension into A and force it to
 broadcast along that axis.  How do I do that?

C, dummy = numpy.broadcast_arrays(A[:,newaxis,:], numpy.empty([1,state,1]))

-- 
Robert Kern
___
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion


Re: [Numpy-discussion] Broadcasting question

2008-12-04 Thread Stéfan van der Walt
Hi Olivier

2008/12/4 Olivier Grisel [EMAIL PROTECTED]:
 To avoid the python level loop I then tried to use broadcasting as follows:

 c = sum((a[:,newaxis,:] - b) ** 2, axis=2)

 But this build a useless and huge (d1, d2, d3) temporary array that
 does not fit in memory for large values of d1, d2 and d3...

Does  numpy.lib.broadcast_arrays do what you need?

Regards
Stéfan
___
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion


Re: [Numpy-discussion] Broadcasting question

2008-12-04 Thread Olivier Grisel
2008/12/4 Stéfan van der Walt [EMAIL PROTECTED]:
 Hi Olivier

 2008/12/4 Olivier Grisel [EMAIL PROTECTED]:
 To avoid the python level loop I then tried to use broadcasting as follows:

 c = sum((a[:,newaxis,:] - b) ** 2, axis=2)

 But this build a useless and huge (d1, d2, d3) temporary array that
 does not fit in memory for large values of d1, d2 and d3...

 Does  numpy.lib.broadcast_arrays do what you need?

That looks exactly what I am looking for. Apparently this is new in
1.2 since I cannot find it in the 1.1 version of my system.

Thanks,

-- 
Olivier
___
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion


Re: [Numpy-discussion] Broadcasting question

2008-12-04 Thread Charles R Harris
On Thu, Dec 4, 2008 at 8:26 AM, Olivier Grisel [EMAIL PROTECTED]wrote:

 Hi list,

 Suppose I have array a with dimensions (d1, d3) and array b with
 dimensions (d2, d3). I want to compute array c with dimensions (d1,
 d2) holding the squared euclidian norms of vectors in a and b with
 size d3.


Just to clarify the problem a bit, it looks like you want to compute the
squared euclidean distance between every vector in a and every vector in b,
i.e., a distance matrix. Is that correct? Also, how big are d1,d2,d3?

If you *are* looking to compute the distance matrix I suspect your end goal
is something beyond that. Could you describe what you are trying to do? I
could be that scipy.spatial or scipy.cluster are what you should look at.

snip

Chuck
___
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion


Re: [Numpy-discussion] Broadcasting question

2008-12-04 Thread Olivier Grisel
2008/12/4 Charles R Harris [EMAIL PROTECTED]:


 On Thu, Dec 4, 2008 at 8:26 AM, Olivier Grisel [EMAIL PROTECTED]
 wrote:

 Hi list,

 Suppose I have array a with dimensions (d1, d3) and array b with
 dimensions (d2, d3). I want to compute array c with dimensions (d1,
 d2) holding the squared euclidian norms of vectors in a and b with
 size d3.

 Just to clarify the problem a bit, it looks like you want to compute the
 squared euclidean distance between every vector in a and every vector in b,
 i.e., a distance matrix. Is that correct? Also, how big are d1,d2,d3?

I would target d1  d2 ~ d3 with d1 as large as possible to fit in
memory and d2 and d3 in the order of a couple hundreds or thousands
for a start.

 If you *are* looking to compute the distance matrix I suspect your end goal
 is something beyond that. Could you describe what you are trying to do?

My end goal it to compute the activation of an array of Radial Basis
Function units where the activation of unit with center b_j for data
vector a_i is given by:

f(a_i, b_j) = exp(-||a_i - bj|| ** 2 / (2 * sigma))

The end goal is to have building blocks of various parameterized array
of homogeneous units (linear, sigmoid and RBF) along with their
gradient in parameter space so as too build various machine learning
algorithms such as multi layer perceptrons with various training
strategies such as Stochastic Gradient Descent. That code might be
integrated into the Modular Data Processing (MPD toolkit) project [1]
at some point.

The current stat of the python code is here:

http://www.bitbucket.org/ogrisel/oglab/src/186eab341408/simdkernel/src/simdkernel/scalar.py

You can find an SSE optimized C implementation wrapped with ctypes here:

http://www.bitbucket.org/ogrisel/oglab/src/186eab341408/simdkernel/src/simdkernel/sse.py
http://www.bitbucket.org/ogrisel/oglab/src/186eab341408/simdkernel/src/simdkernel/sse.c

 It could be that scipy.spatial or scipy.cluster are what you should look at.

I'll have a look at those, thanks for the pointer.

[1] http://mdp-toolkit.sourceforge.net/

-- 
Olivier
___
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion


Re: [Numpy-discussion] Broadcasting question

2008-05-02 Thread Anne Archibald
2008/5/2 Chris.Barker [EMAIL PROTECTED]:
 Hi all,

  I have a n X m X 3 array, and I a n X M array. I want to assign the
  values in the n X m to all three of the slices in the bigger array:

  A1 = np.zeros((5,4,3))
  A2 = np.ones((5,4))
  A1[:,:,0] = A2
  A1[:,:,1] = A2
  A1[:,:,2] = A2

  However,it seems I should be able to broadcast that, so I don't have to
  repeat myself, but I can't figure out how.

All you need is a newaxis on A2:
In [2]: A = np.zeros((3,4))

In [3]: B = np.ones(3)

In [4]: A[:,:] = B[:,np.newaxis]

In [5]: A
Out[5]:
array([[ 1.,  1.,  1.,  1.],
   [ 1.,  1.,  1.,  1.],
   [ 1.,  1.,  1.,  1.]])


Anne
___
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion


Re: [Numpy-discussion] Broadcasting question

2008-05-02 Thread Christopher Barker

Charles R Harris wrote:
 A1 += A2[:,:,newaxis] is one way.

Exactly what I was looking for -- thanks Charles (and Ann)

-Chris

-- 
Christopher Barker, Ph.D.
Oceanographer

Emergency Response Division
NOAA/NOS/ORR(206) 526-6959   voice
7600 Sand Point Way NE   (206) 526-6329   fax
Seattle, WA  98115   (206) 526-6317   main reception

[EMAIL PROTECTED]
___
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion


Re: [Numpy-discussion] Broadcasting question

2008-05-01 Thread Charles R Harris
On Thu, May 1, 2008 at 10:58 PM, Chris.Barker [EMAIL PROTECTED] wrote:

 Hi all,

 I have a n X m X 3 array, and I a n X M array. I want to assign the
 values in the n X m to all three of the slices in the bigger array:

 A1 = np.zeros((5,4,3))
 A2 = np.ones((5,4))
 A1[:,:,0] = A2
 A1[:,:,1] = A2
 A1[:,:,2] = A2


A1 += A2[:,:,newaxis] is one way. Or you could just start by stacking copies
of A2 and swapping axes around:

In [5]: A1 = array([A2.T]*3).T

In [6]: A1.shape
Out[6]: (4, 5, 3)

Chuck
___
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion