Numpy дает «TypeError: невозможно умножить последовательность на не-int типа 'float'" - PullRequest
0 голосов
/ 31 мая 2018

Проблемная часть:

   self.H = np.multiply(self.H, np.divide(np.matmul(preprocessing.normalize(self.W).T, np.multiply(self.X, np.power(self.A, self.beta - 2)))), np.matmul(self.W.T, np.power(self.A, self.beta - 1)) + self.sparsity)

A, W, H - кадры данных Panda.Бета и разреженность являются целыми числами.

Их инициализация:

    self.W = pd.DataFrame(np.random.randint(100,size=(self.X.shape[0], self.K)))
    self.H = pd.DataFrame(np.random.randint(0,100,size=(self.K, self.X.shape[1])))
    self.W = preprocessing.normalize(self.W)
    self.A = self.W.dot(self.H)

1 Ответ

0 голосов
/ 31 мая 2018

Type Error: can't multiply sequence by non-int of type 'float' означает именно то, что говорит.Вы не можете умножить тип данных, не являющийся числом (не целым числом), на тип данных с номером.Например, вы не можете умножать строки на число.

Приведенный выше код на самом деле работает.Но, поскольку вы получаете эту ошибку, я предполагаю, что приведенный выше код является просто прокси для вашего фактического кода.Итак, я расскажу, как я решил ту же ошибку, которую получил, когда делал что-то похожее.


Допустим, есть CSV-файл, содержащий метки субъекта для такого класса, как таблица.ниже

|      | Maths | English |
| Adam |  98   |   78    |
| John |  34   |   89    |

Как видите, есть индекс строки, а также индекс столбца.Если вы запустите

marks = pd.read_csv("marks.csv")

marks будет иметь 3 столбца с первым столбцом, содержащим имена студентов.Pandas read предположил, что первый столбец был частью данных.Теперь, если вы умножите это на массив Numpy, вы получите ошибку.Поскольку числа не могут быть умножены на строки.

Чтобы решить эту проблему, нам нужно явно указать pandas, что первый столбец в файле - это индекс строки.

marks = pd.read_csv("marks.csv", index_col=0)

Параметр index_col указывает, какой столбец в файле следуетвзять в качестве индекса строки.Вы можете прочитать об этом подробно в их документации, здесь .

...