title: numpy slice an array without copying it
body: <p>I have a large data in matrix <code>x</code> and I need to analyze some some submatrices. </p>
  
  <p>I am using the following code to select the submatrix:</p>
  
  <pre><code>&gt;&gt;&gt; import numpy as np
  &gt;&gt;&gt; x = np.random.normal(0,1,(20,2))
  &gt;&gt;&gt; x
  array([[-1.03266826,  0.04646684],
         [ 0.05898304,  0.31834926],
         [-0.1916809 , -0.97929025],
         [-0.48837085, -0.62295003],
         [-0.50731017,  0.50305894],
         [ 0.06457385, -0.10670002],
         [-0.72573604,  1.10026385],
         [-0.90893845,  0.99827162],
         [ 0.20714399, -0.56965615],
         [ 0.8041371 ,  0.21910274],
         [-0.65882317,  0.2657183 ],
         [-1.1214074 , -0.39886425],
         [ 0.0784783 , -0.21630006],
         [-0.91802557, -0.20178683],
         [ 0.88268539, -0.66470235],
         [-0.03652459,  1.49798484],
         [ 1.76329838, -0.26554555],
         [-0.97546845, -2.41823586],
         [ 0.32335103, -1.35091711],
         [-0.12981597,  0.27591674]])
  &gt;&gt;&gt; index = x[:,1] &gt; 0
  &gt;&gt;&gt; index
  array([ True,  True, False, False,  True, False,  True,  True, False,
          True,  True, False, False, False, False,  True, False, False,
         False,  True], dtype=bool)
  &gt;&gt;&gt; x1 = x[index, :] #x1 is a copy of the submatrix
  &gt;&gt;&gt; x1
  array([[-1.03266826,  0.04646684],
         [ 0.05898304,  0.31834926],
         [-0.50731017,  0.50305894],
         [-0.72573604,  1.10026385],
         [-0.90893845,  0.99827162],
         [ 0.8041371 ,  0.21910274],
         [-0.65882317,  0.2657183 ],
         [-0.03652459,  1.49798484],
         [-0.12981597,  0.27591674]])
  &gt;&gt;&gt; x1[0,0] = 1000
  &gt;&gt;&gt; x1
  array([[  1.00000000e+03,   4.64668400e-02],
         [  5.89830401e-02,   3.18349259e-01],
         [ -5.07310170e-01,   5.03058935e-01],
         [ -7.25736045e-01,   1.10026385e+00],
         [ -9.08938455e-01,   9.98271624e-01],
         [  8.04137104e-01,   2.19102741e-01],
         [ -6.58823174e-01,   2.65718300e-01],
         [ -3.65245877e-02,   1.49798484e+00],
         [ -1.29815968e-01,   2.75916735e-01]])
  &gt;&gt;&gt; x
  array([[-1.03266826,  0.04646684],
         [ 0.05898304,  0.31834926],
         [-0.1916809 , -0.97929025],
         [-0.48837085, -0.62295003],
         [-0.50731017,  0.50305894],
         [ 0.06457385, -0.10670002],
         [-0.72573604,  1.10026385],
         [-0.90893845,  0.99827162],
         [ 0.20714399, -0.56965615],
         [ 0.8041371 ,  0.21910274],
         [-0.65882317,  0.2657183 ],
         [-1.1214074 , -0.39886425],
         [ 0.0784783 , -0.21630006],
         [-0.91802557, -0.20178683],
         [ 0.88268539, -0.66470235],
         [-0.03652459,  1.49798484],
         [ 1.76329838, -0.26554555],
         [-0.97546845, -2.41823586],
         [ 0.32335103, -1.35091711],
         [-0.12981597,  0.27591674]])
  &gt;&gt;&gt; 
  </code></pre>
  
  <p>but I would like x1 to be only a pointer or something like this. Copy the data every time that I need a submatrix is too expensive for me. 
  How can I do that?</p>
  
  <p>EDIT:
  Apparently there is not any solution with the  numpy array. Are the pandas data frame better from this point of view?</p>