読者です 読者をやめる 読者になる 読者になる

Pythonデータサイエンスクックブック

(2順目)

レシピ4.6

終了

レシピ4.7

終了

レシピ4.8

1項

  a = np.random.random_sample((n, d));  
  aid = id(a)  
  print(a)  

  [[ 0.55018576  0.5077209   0.32207054 ...,  0.1759042   0.40456074
     0.72045229]
   [ 0.49654852  0.10445829  0.35981761 ...,  0.81583951  0.64972485
     0.76342936]
   [ 0.3679865   0.5734621   0.05725147 ...,  0.88270858  0.95325079
     0.84138566]
   ..., 
   [ 0.93199799  0.25924236  0.75891025 ...,  0.78919081  0.46252381
     0.42590794]
   [ 0.39260158  0.02782338  0.61697793 ...,  0.71679825  0.86234797
     0.82528389]
   [ 0.18653985  0.60269072  0.74888681 ...,  0.73380749  0.67840095
     0.21951377]]

と100000行, 100列の配列ができた

  b1 = a[::10]  
  print(b1)  
  print(b1.shape)    

  [[ 0.21777695  0.73266912  0.56916499 ...,  0.04611326  0.59385573
     0.42838149]
   [ 0.29725731  0.03514158  0.03377906 ...,  0.12204138  0.95564346
     0.59359067]
   [ 0.41164286  0.78377111  0.20021033 ...,  0.23315725  0.15772705
     0.34386082]
   ..., 
   [ 0.09575724  0.12338406  0.2696272  ...,  0.303831    0.95224218
     0.39553348]
   [ 0.33995028  0.10141446  0.72985132 ...,  0.42404091  0.97774871
     0.267536  ]
   [ 0.68570089  0.70490165  0.75480643 ...,  0.62479806  0.54240161
     0.17971806]]

(10000, 100) 行方向の数が元の配列より10分の1になっている

  b2 = a[np.arange(0, n, 10)]  
  print(np.arange(0, n, 10))  

b2配列も同じになった

  print(type(np.arange(0, n, 10)))  
  [    0    10    20 ..., 99970 99980 99990]

と表示された
numpyの配列をインデックス指定で要素を抜き取るときは

  array[[index1,index2,index3]]    

とする、このような方法をファンシーインデックスという
ちなみにタプルで指定するとエラーとなる
ファンシーインデックスで抜き取られた要素は新しい配列をつくり要素はコピーとなるので
時間がかかることもある。

  np.take(array,indices,axis=None)

は与えられた配列arrayの軸axisに沿って、指定されたインデックスの要素を取り出す関数