Попытка создать помеченный массив numpy

Я хочу иметь массив numpy со значениями и соответствующими метками для каждого значения. Я использую этот массив для линейной регрессии, и это будет мой вектор данных X в уравнении y = Xb + error .

Мой вектор X состоит из примерно 20 переменных, каждый из которых я хотел бы иметь возможность ссылаться по имени так, как X['variable1'] . Сначала я использовал словарь для этого, но понял, что библиотека scikit для линейной регрессии требует матричной матрицы, поэтому я пытаюсь создать массив numpy, который помечен.

Я продолжаю получать сообщение об ошибке:

 TypeError: a bytes-like object is required, not 'int'. 

Это то, что я делаю:

 X = np.array([3],dtype=[('label1','int')]) 

В конечном итоге я хочу иметь 20 обозначенных значений, что-то вроде этого:

 X = np.array([3,40,7,2,...], dtype=[('label1',int'),('label2','int'),('label3','int')...]) 

Был бы очень признателен за любую помощь по синтаксису здесь. Благодаря!

2 Solutions collect form web for “Попытка создать помеченный массив numpy”

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

 In [55]: X Out[55]: array([(3,)], dtype=[('label1', '<i4')]) In [56]: X=np.array([(3,4)],dtype=[('label1',int),('label2',int)]) In [57]: X Out[57]: array([(3, 4)], dtype=[('label1', '<i4'), ('label2', '<i4')]) 

Но я должен предупредить вас, что такой массив не является 2d (или матрицей), он равен 1d с полями:

 In [58]: X.shape Out[58]: (1,) In [59]: X.dtype Out[59]: dtype([('label1', '<i4'), ('label2', '<i4')]) 

И вы не можете делать математику по полям; X*2 и X.sum() будут вызывать ошибки. Использование X в таком уравнении, как y = X*b + error будет безнадежным.

Вам, вероятно, лучше работать с реальными 2d числовыми массивами, а также сопоставлять между метками и номерами столбцов в вашей голове или со словарем.

Или используйте Панды.

Поскольку с 20 переменными память не является проблемой, вы можете продолжать использовать словари:

 from collections import OrderedDict # Dictionary that remembers insertion order import numpy as np dd = OrderedDict() dd["Var1"] = 10 dd["Var2"] = 20 dd["Var3"] = 30 # make numpy array from dict: xx = np.array([v for v in dd.values()]) # make dict() from array: xx2 = 2*xx dd2 = OrderedDict((k, v) for (k,v) in zip(dd.keys(), xx2)) 
Python - лучший язык программирования в мире.