2017-03-24 18 views
-3

を持っていない私は、次のコード部分を持っている:パイソン - 例外TypeError:型 'numpy.int32' のオブジェクトはLEN()

names = unpickle('batch') 
    print('names', names) 

    data, labels = [], [] 
    filename = 'batch' 
    batch_data = unpickle(filename) 
    for i in range(0, 2): 
     if len(data) > 0: 
      data = np.vstack((data, batch_data[0][i])) 
      labels = np.hstack((labels, batch_data[1][i])) 
     else: 
      data = batch_data[0][0] 
      labels = batch_data[1][0] 

    data = data.astype(np.float32) 

この部分が呼び出されると、私は次のエラーを取得:

names [array([1, 1]), array(['118.jpg', '119.jpg'], 
     dtype='<U7'), array([[130, 136, 139, ..., 156, 150, 152], 
     [151, 156, 161, ..., 160, 173, 171]])] 
Traceback (most recent call last): 
    File "cnn.py", line 6, in <module> 
    name, data, labels = cifar_tools.read_data('C:\\Users\\abc\\Desktop\\temp') 
    File "C:\Users\abc\Desktop\Testing\cifar_tools.py", line 36, in read_data 
    if len(data) > 0: 
TypeError: object of type 'numpy.int32' has no len() 

EDIT

これはdataバイナリファイルがどのように見えるかです:

[array([1, 1]), array(['118.jpg', '119.jpg'], 
     dtype='<U7'), array([[130, 136, 139, ..., 156, 150, 152], 
     [151, 156, 161, ..., 160, 173, 171]])] 

は、どのように私はこの問題を解決することができますか?

ありがとうございました。

+0

'data = batch_data [0] [0]'の後に、あなたは 'data'をどのように想定していますか? – user2357112

+0

お返事ありがとうございます。エラーは、その行に達する前に表示されるようです。それは "if len(data)> 0:"で起こります。データは画像のピクセルになります。 – Simplicity

+0

'もしlen(data)> 0'が複数回起こるなら、あなたは知っています。 – user2357112

答えて

0

ループで初めて、data[]です。したがって、elseブランチになります。 2回目databatch_data[0][0]です。それは何ですか?明らかにそれはnp.int32であり、配列の要素です。それで、長さはありません。 dataよう

data = [] 
.... 
for i in range(0, 2): 
    if len(data) > 0: 
     data = np.vstack((data, batch_data[0][i])) 
     labels = np.hstack((labels, batch_data[1][i])) 
    else: 
     data = batch_data[0][0] 
     labels = batch_data[1][0] 

このようなループを行うと、確認した変数は、各反復で同じまたは互換性のあるタイプがあります。 dataがリストとして開始された場合は、ループを通ってリストのままになります。リストを使用して

正しい反復解法を使用すると、(LENをテストする必要はありません追加リストで

data, labels = [], [] 
filename = 'batch' 
batch_data = unpickle(filename) 
for i in range(0, 2): 
    data.append(batch_data[0][i]) 
    labels.append(batch_data[1][i]) 
data = np.array(data, dtype=float) 
labels = np.array(labels) # or leave as list? 

を追加)== 0特殊なケース

しかし、あなたも必要なのだろうかループ:

data = np.array(batch_data[0])) 
labels = np.array(batch_data[1]) 
+0

お返事ありがとうございます。この場合、エラーを解決するために何をすべきですか? – Simplicity

+0

リストの追加を使用して提案を追加しました。 – hpaulj

関連する問題