Как произвести список плаваний к двоичному файлу в Python

Преобразователь ожидает двумерный массив формы (nxm), где n - количество выборок, а m - число объектов, и если вы посмотрите на форму features, я представлю, что она отобразит: (m,). [ 1119]

Изменение формы массивов

В общем случае для массива объектов формы (n,) вы можете сделать так, как предлагает код ошибки, и вызвать .reshape(-1,1) в вашем массиве объектов, -1 позволяет ему выводить дополнительное измерение: форма массива будет (n,m), где для случая 1 признака m = 1.

Склеарн-трансформеры

Выше сказанное, я думаю, есть дополнительные ошибки в вашем коде и понимании.

Я бы напечатал features на экране и проверил, что это то, что вам нужно, похоже, вы печатаете список всех имен столбцов, кроме sale_price. Я не знаком с SelectKBest , но для него требуется массив (n,m) Feature , а не список имен столбцов объектов.

Кроме того, target должно быть не именем целевого столбца, а массивом формы (n,), где его значения являются наблюдаемыми целевыми значениями обучающих экземпляров.

Я бы посоветовал проверить документацию (на которую ранее ссылались), пока вы пишете свой код, чтобы убедиться, что вы используете правильные аргументы и используете функцию по назначению.

Извлечение функций

Ваши данные выглядят в странном формате (словарь вложен в DF-файл pandas). Тем не менее, это явный пример того, как я мог бы извлечь функции из pd.DataFrame для использования с функциями из среды SKlearn.

housing_data = pd.DataFrame({'age': [1,5,1,10], 'size':[0,1,2,0], 
                             'price':[190,100,50,100]
                            })

feature_arr = housing_data.drop('price', axis=1).values
target_values = housing_data['price']

Распечатайте feature_arr и, надеюсь, увидите свою проблему. Обычно тогда вам нужно предварительно обработать данные, чтобы, например, сбросить значения NaN или выполнить масштабирование объекта.

25
задан dbr 30 April 2009 в 21:37
поделиться

6 ответов

Алекс абсолютно прав, более эффективно сделать это следующим образом:

from array import array
output_file = open('file', 'wb')
float_array = array('d', [3.14, 2.7, 0.0, -1.0, 1.1])
float_array.tofile(output_file)
output_file.close()

А затем прочитать массив следующим образом:

input_file = open('file', 'rb')
float_array = array('d')
float_array.fromstring(input_file.read())

У объектов array.array также есть метод .fromfile , который можно использовать для чтения файла, если вы заранее знаете количество элементов (например, из размера файла или какого-либо другого механизма). )

40
ответ дан 28 November 2019 в 17:46
поделиться

Я не уверен, как NumPy будет сравнивать с точки зрения производительности для вашего приложения, но, возможно, стоит исследовать.

Использование NumPy :

from numpy import array
a = array(floats,'float32')
output_file = open('file', 'wb')
a.tofile(output_file)
output_file.close()

также приводит к 20-байтовому файлу.

10
ответ дан 28 November 2019 в 17:46
поделиться

Модуль массива в стандартной библиотеке может быть более подходящим для этой задачи, чем модуль struct, который предлагают все. Производительность с 200 МБ данных должна быть существенно выше с массивом.

Если вы хотите использовать различные варианты, попробуйте профилировать вашу систему с примерно так

12
ответ дан 28 November 2019 в 17:46
поделиться

См .: Структурный модуль Python

import struct
s = struct.pack('f'*len(floats), *floats)
f = open('file','wb')
f.write(s)
f.close()
20
ответ дан 28 November 2019 в 17:46
поделиться

посмотрите struct.pack_into

3
ответ дан 28 November 2019 в 17:46
поделиться

struct.pack () выглядит как то, что вам нужно.

http://docs.python.org/library/struct.html

3
ответ дан 28 November 2019 в 17:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: