2017-07-25 18 views
0

分子の座標に基づいて特定のビンに入る分子の数を数えようとしていました。私はnumpyの非ゼロオプション(MATLABのfind()に似ています)が仕事をすることができると思います。最初は、私はnp.anyを使用していないが、私はnp.anyを使用すると、私はエラーに座標に基づいてビンに入るカウント数

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all().

を持って、エラーが持続します。

Lower limit = 0 
bin_size=0.01 
box=40 
NO_bin= box/bin_size 
for k in range(No_bins): 
     if k==0: 
      count = np.any(np.size(np.nonzero(data_matrix[:,3]>= k*bin_size+lower_limit and \ 
      data_matrix[:,3]<=(k+1)*bin_size+lower_limit))) 
     else: 
      count = np.any(np.size(np.nonzero(data_matrix[:,3]>=(k-1)*bin_size+lower_limit and \ 
      data_matrix[:,3]<=k*bin_size+lower_limit))) 

      Atom_in_bin[j,2] = Atom_in_bin[j,2] + count 

答えて

0

まず、あなたの範囲で浮動小数点値を使用しますが、この関数はint引数だけをとります。 あなたはint型にあなたのNo_binsをキャストすることができますが、私はあなたがnp.arangeであなたのビンを構築し、それを反復することをお勧め:

bins = np.arange(0, box, bin_size) 
for k, bin in enumerate(bins): 

あなたのエラーからとnp.anyに入っています。 and演算は、複数の要素を持つ配列に対しては定義されていません。 代わりにあなたがnp.logical_and機能を使用する必要があります。

np.any(np.logical_and(data <= top_bin, data > bot_bin)) 

をしかし、あなたは、ヒストグラムを構築しようとしている場合は、numpyのは、そのための機能を持っている:https://docs.scipy.org/doc/numpy/reference/generated/numpy.histogram.html

bins = np.arange(0, box + bin_size, bin_size) 
hist, _ = np.histogram(data, bins=bins) 
関連する問題