2015-08-15 3 views
0

Я пытаюсь использовать данные MNIST для моего исследования work.Now описание набора данных:Как написать ndarray в текстовый файл в python?

training_data возвращается в виде кортежа с двумя входами. Первая запись содержит фактические учебные изображения. Это numpy ndarray с 50 000 записей. Каждая запись, в свою очередь, содержит numpy ndarray с 784 значениями, представляющими 28 * 28 = 784 пикселей в одном изображении MNIST.

The second entry in the ``training_data`` tuple is a numpy ndarray 
containing 50,000 entries. Those entries are just the digit 
values (0...9) for the corresponding images contained in the first 
entry of the tuple. 

Теперь я уверен, преобразование обучающих данных, как это:

В частности, training_data представляет собой список, содержащий 50000 2-кортежи (x, y). x - это 784-мерный numpy.ndarray , содержащий входное изображение. y - это 10-мерный numpy.ndarray, представляющий единичный вектор, соответствующий правильной цифре для x. и код, который:

def load_data_nn(): 
    training_data, validation_data, test_data = load_data() 
    #print training_data[0][1] 
    #inputs = [np.reshape(x, (784, 1)) for x in training_data[0]] 
    inputs = [np.reshape(x, (784,1)) for x in training_data[0]] 
    print inputs[0] 
    results = [vectorized_result(y) for y in training_data[1]] 
    training_data = zip(inputs, results) 
    test_inputs = [np.reshape(x, (784, 1)) for x in test_data[0]] 
    return (training_data, test_inputs, test_data[1]) 

Теперь я хочу написать входы в текстовый файл, который означает, что одна строка будет входы [0], а другой ряд будет входов [1] и данные внутри входов [0] будет пространство разделены и не ndarray скобки present.For Пример:

0 0.45 0.47 0,76 

0.78 0.34 0.35 0.56 

Здесь одна строка в текстовом файле входов [0] .Как для преобразования ndarray, чтобы, как выше в текстовом файле? ?

ответ

1

Поскольку ответ на ваш вопрос кажется довольно простым, я думаю, ваша проблема - это скорость. К счастью, здесь мы можем использовать многопроцессорность. Попробуйте это:

from multiprocessing import Pool 

def joinRow(row): 
    return ' '.join(str(cell) for cell in row) 

def inputsToFile(inputs, filepath): 
    # in python3 you can do: 
    # with Pool() as p: 
    #  lines = p.map(joinRow, inputs, chunksize=1000) 
    # instead of code from here... 
    p = Pool() 
    try: 
     lines = p.map(joinRow, inputs, chunksize=1000) 
    finally: 
     p.close() 
    # ...to here. But this works for both. 

    with open(filepath,'w') as f: 
     f.write('\n'.join(lines)) # joining already created strings goes fast 

Все еще требуется некоторое время на моей дерьмовой ноутбук, но это намного быстрее, чем просто '\n'.join(' '.join(str(cell) for cell in row) for row in inputs)

Кстати, вы можете ускорить остальную часть кода, а также:

def load_data_nn(): 
    training_data, validation_data, test_data = load_data() 
    # suppose training_data[0].shape == (50000,28,28), otherwise leave it as is 
    inputs = training_data[0].reshape((50000,784,1)) 
    print inputs[0] 
    # create identity matrix and use entries of training_data[1] to 
    # index corresponding unit vectors 
    results = np.eye(10)[training_data[1]] 
    training_data = zip(inputs, results) 
    # suppose test_data[0].shape == (50000,28,28), otherwise leave it as is 
    test_inputs = test_data[0].reshape((50000,784,1)) 
    return (training_data, test_inputs, test_data[1]) 
Смежные вопросы