docstr: Other implementation
docstr_tok: ["Other","implementation"]
code: def gemv_numpy3(o, W, h, iIdx, oIdx):
      """
      Other implementation
      """
      from numpy import ix_
  
      for b in range(o.shape[0]):
          w = W[ix_(iIdx[b], oIdx[b])]
          # The next three lines do the same operation. The last one is the
          # fastest
          # o[b] += (h[b][:, None, :, None] * w).sum(axis=(0, 2))
          # o[b] += np.tensordot(h[b], w, [(0,1),(0,2)])
          o[b] += np.einsum("ik,ijkl", h[b], w)
      return o
  
imports: from __future__ import absolute_import, print_function, division
  import numpy
  from numpy.random import randn
  import theano
  from theano import tensor
  import theano.tests.unittest_tools
  from theano.tensor.nnet.blocksparse import sparse_block_dot, sparse_block_gemv, sparse_block_outer, SparseBlockGemv, SparseBlockOuter
label_desc: Use image node_id 6 for calling the BlockSparse_Gemv_and_Outer obj's underlying member method code with example usage: obj.gemv_numpy3(o, W, h, iIdx, oIdx) and returns: o