будет накапливаться в той же позиции в плоской версии. Таким образом, с этим смещением мы сохраняем одни и те же числа в разных строках как отдельные для работы с bincount. Вот и вся идея.
я есть массив NumPy с целочисленными значениями. Значения матрицы варьируются от 0 до максимального элемента в матрице (другими словами, все числа от 0 до максимального элемента данных представлены в нем). Мне нужно построить эффективно (эффективное средство быстрое полностью векторизованное решение) для поиска количества элементов в каждой строке и их кодирования в соответствии со значениями матрицы.
Я не мог найти подобный вопрос или вопрос, который каким-то образом помог решить эту проблему.
Так что, если у меня есть этоdata
на входе:
# shape is (N0=4, m0=4)
1 1 0 4
2 4 2 1
1 2 3 5
4 4 4 1
желаемый результат:
# shape(N=N0, m=data.max()+1):
1 2 0 0 1 0
0 1 2 0 1 0
0 1 1 1 0 1
0 1 0 0 3 0
Я знаю, как решить эту проблему, просто посчитав уникальные значения в каждой строкеdata
повторяя одну за другой, а затем объединяя результаты с учетом всех возможных значений вdata
массив.
При использовании NumPy для векторизации этого ключевая проблема заключается в том, что поиск каждого числа один за другим идет медленно и при условии, что представлено много уникальных чисел, это не может быть эффективным решением. Как правило, обаN
и количество уникальных номеров довольно велико (кстати,N
кажется, больше, чем количество уникальных чисел).
У кого-нибудь есть отличные идеи?)