web-dev-qa-db-ja.com

「インデックス0はサイズ0の軸0の境界外」とはどういう意味ですか?

私はpythonとnumpyの両方に新しいです。私は書いたコードを実行し、次のメッセージを受け取りました: 'インデックス0はサイズ0の軸0の境界外です'コンテキストなし、これが何を意味するのかを理解したいだけです。これを尋ねるのはばかげているかもしれませんが、軸0とサイズ0の意味は?index 0は配列の最初の値を意味します。 0およびサイズ0は意味します。

「データ」は、2つの列に多数の数字があるテキストファイルです。

x = np.linspace(1735.0,1775.0,100)
column1 = (data[0,0:-1]+data[0,1:])/2.0
column2 = data[1,1:]
x_column1 = np.zeros(x.size+2)
x_column1[1:-1] = x
x_column1[0] = x[0]+x[0]-x[1]
x_column1[-1] = x[-1]+x[-1]-x[-2]
experiment = np.zeros_like(x)
for i in range(np.size(x_edges)-2):
    indexes = np.flatnonzero(np.logical_and((column1>=x_column1[i]),(column1<x_column1[i+1])))
    temp_column2 = column2[indexes]
    temp_column2[0] -= column2[indexes[0]]*(x_column1[i]-column1[indexes[0]-1])/(column1[indexes[0]]-column1[indexes[0]-1])
    temp_column2[-1] -= column2[indexes[-1]]*(column1[indexes[-1]+1]-x_column1[i+1])/(column1[indexes[-1]+1]-column1[indexes[-1]])
    experiment[i] = np.sum(temp_column2)   
return experiment
7
Seoyeon Hong

numpyでは、インデックスとディメンションの番号付けは0から始まります。したがって、_axis 0_は1番目のディメンションを意味します。また、numpyでは、次元の長さ(サイズ)を0にすることができます。最も単純なケースは次のとおりです。

_In [435]: x = np.zeros((0,), int)
In [436]: x
Out[436]: array([], dtype=int32)
In [437]: x[0]
...
IndexError: index 0 is out of bounds for axis 0 with size 0
_

x = np.zeros((0,5), int)、0行、5列の2D配列の場合も取得します。

したがって、コードのどこかで、サイズ0の最初の軸を持つ配列を作成しています。

エラーについて尋ねるときは、エラーが発生した場所をお知らせください。

また、このような問題をデバッグする場合、最初にすべきことは、疑わしい変数のshape(およびおそらくdtype)を出力することです。

10
hpaulj

基本的に、参照しようとしているインデックスがないことを意味します。例えば:

df = pd.DataFrame()
df['this']=np.nan
df['my']=np.nan
df['data']=np.nan
df['data'][0]=5 #I haven't yet assigned how long df[data] should be!
print(df)

Pandas私のデータフレームの長さを教えていないので、あなたが参照しているエラーが表示されます。一方、まったく同じコードを実行するが、インデックスの長さを割り当てる場合は、エラーが発生しない:

df = pd.DataFrame(index=[0,1,2,3,4])
df['this']=np.nan
df['is']=np.nan
df['my']=np.nan
df['data']=np.nan
df['data'][0]=5 #since I've properly labelled my index, I don't run into this problem!
print(df)

それがあなたの質問に答えることを願っています!

2
Daniel Abud