2016-10-17 6 views
0

3列の大きな3列の配列を作成し、乱数で埋めています。次に、行を索引付けし、条件に一致しない行を削除します。何らかの理由で、私を通して私のインデックスは次のエラーを取得するよう: Traceback (most recent call last): File "hw_2.py", line 16, in <module> if math.sqrt(cube[y,0]**(2) + cube[y,1]**(2) + cube[y,2]**(2)) > 1: IndexError: index 6786 is out of bounds for axis 0 with size 6786ナンシーアレイのサイズは縮小しており、ランダムに変化しています。インデックスが範囲外になるエラー

私のコードは次のとおりです:

import numpy as np 
    import math 


    #Create a large empty array that can be filled with random numbers 
    cube=np.empty([10000,3]); 

    #Fill the array with 1x3 (x,y,z) randos in a 1x1 cube 
    for x in xrange(0,10000): 
     cube[x] = np.random.uniform(-1,1,3) 

    #Consider each coordinate as a vector from the origin; reject all sets of x,y,z vectors whose magnitudes are greater than the radius of the sphere 
    for y in xrange(0,10000): 
     if math.sqrt(cube[y,0]**(2) + cube[y,1]**(2) + cube[y,2]**(2)) > 1: 
      cube = np.delete(cube, (y), axis=0) 

    #Reject all sets of vectors whose x,y components lay in a circle in the x,y plane of radius 0.25 
    for i in xrange(0,10000): 
     if cube[i,0] > 0 and cube[i,0]**(2) + cube[i,1]**(2) <= 0.25: 
      cube = np.delete(cube, (i), axis=0) 

    #Report the average of all coordinates in each plane, this will be the location of the center of mass 
    centermass = np.mean(cube, axis=0)` 

軸の大きさがで10,000未満になる理由を私は理解していませんこの時点では、10,000行すべてが2番目のコマンドで満たされます。

+0

残りの行を反復処理を継続しながら、あなたのアレイの行を削除しています。これにより、配列のサイズが小さくなります。これは 'np.delete()'への最初の呼び出しの直後に 'print(cube.shape)'を置くことで簡単に見ることができます。これは配列のサイズを10000 – DavidG

+0

'キューブ[y、0]'インデックス現在の 'cube'配列ではなく、元のものです。 'delete'は呼び出しごとに新しい小さなコピーを作成します。 – hpaulj

答えて

0

アレイの特定の部分を選択しようとしているようです。 np.deleteを行う必要は通常ありません、あなたが代わりにブールマスクを使用することができます。

In [34]: np.random.seed(1234) 

In [35]: cube = np.random.uniform(-1, 1, size=10000*3).reshape(10000, 3) 

In [36]: mask = (cube**2).sum(axis=1) > 0.5 

In [37]: mask.shape 
Out[37]: (10000,) 

In [38]: cube[~mask].shape 
Out[38]: (1812, 3) 

In [39]: np.mean(cube[~mask], axis=0) 
Out[39]: array([ 1.39564967e-07, -2.78051170e-03, -1.13108653e-03]) 
関連する問題