TypeError: только массивы размера 1 могут быть преобразованы в скаляры Python при попытке сохранить массивы в текстовом файле - PullRequest
0 голосов
/ 07 октября 2018

У меня есть два массива следующей формы:

x_train = np.ndarray(shape = (1383, 15104), dtype = 'int')
y_train = np.ndarray(shape = (1383, 11), dtype = 'int')

, затем у меня есть эта функция для сохранения их в файл .txt:

# Save the data files into a format compatible with CNTK text reader
def savetxt(filename, data, hasLabels=True, labels=0):
    dir = os.path.dirname(filename)

    if not os.path.exists(dir):
        os.makedirs(dir)

    print("Saving", filename )
    with open(filename, 'w') as f:
        print("opened....")
        labels_ohe = list(map(' '.join, np.eye(11, dtype=np.uint).astype(str))) #for one hot encoding
        index = 0
        for row in data:            
            row_str = row.astype(str)
            if hasLabels:                               
                label_str = labels_ohe[int(labels[index])]               

            feature_str = ' '.join(row_str)

            if hasLabels:
                f.write('|labels {} |features {}\n'.format(label_str, feature_str))
            else:
                f.write('|features {}\n'.format(feature_str))

            index = index + 1

тогда, когда я пытаюсьчтобы сохранить мои массивы в текстовый файл с помощью этой функции:

train_labels_GT = y_train[:,1] #Get Ground truth


print ('Writing train text file...')

data_dir = os.path.join(os.getcwd(), "Data/Out")


savetxt(os.path.join(data_dir, "train.txt"), x_train, True, y_train)
savetxt(os.path.join(data_dir, "test.txt"), x_test, True, y_test)


print("Done")

Я получаю сообщение об ошибке:

    TypeError                                 Traceback (most recent call last)
<ipython-input-12-1da41b3fea4d> in <module>
      7 
      8 
----> 9 savetxt(os.path.join(data_dir, "train.txt"), x_train, True, y_train)
     10 savetxt(os.path.join(data_dir, "test.txt"), x_test, True, y_test)
     11 

<ipython-input-6-b3a39923d0b8> in savetxt(filename, data, hasLabels, labels)
     14             row_str = row.astype(str)
     15             if hasLabels:
---> 16                 label_str = labels_ohe[int(labels[index])]
     17 
     18             feature_str = ' '.join(row_str)

TypeError: only size-1 arrays can be converted to Python scalars

Почему происходит эта ошибка и как я могу ее исправить ??

Заранее спасибо

1 Ответ

0 голосов
/ 07 октября 2018

решено:

мне просто нужно было изменить следующие строки в части сохранения текстовых файлов:

вместо:

train_labels_GT = y_train[:,1] #Get Ground truth


print ('Writing train text file...')

data_dir = os.path.join(os.getcwd(), "Data/Out")


savetxt(os.path.join(data_dir, "train.txt"), x_train, True, y_train)
savetxt(os.path.join(data_dir, "test.txt"), x_test, True, y_test)


print("Done")

использовать:

train_labels_GT = y_train[:,1] #Get Ground truth
test_labels_GT = y_test[:,1]

print ('Writing train text file...')

data_dir = os.path.join(os.getcwd(), "Data/Out")


savetxt(os.path.join(data_dir, "train.txt"), x_train, True, train_labels_GT)
savetxt(os.path.join(data_dir, "test.txt"), x_test, True, test_labels_GT)


print("Done")

Тогда все будет сделано правильно.Надеюсь, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...