Почему scipy.sparse_matrix не принимает значения непосредственно из кадра данных?Python

Программы на Python
Ответить
Anonymous
 Почему scipy.sparse_matrix не принимает значения непосредственно из кадра данных?

Сообщение Anonymous »

Я создаю разреженную матрицу, которая отлично работает
X = csr_matrix(
(df["rating"], (item_idx, user_idx)),
shape=(M, N)
)

Но для упрощения где (примерно эквивалентно)
item_idx ~= df[item_id]

Я делаю следующее
csr_matrix(
(df["points"],
(df["user_id"], df["item_id"])])),
shape=(N, M)
)

который возвращает ошибку об индексе и размере разреженной матрицы. Обратите внимание, что эта ошибка возникает, даже если «id» сопоставлен точно с количеством уникальных имен.
ValueError: axis 0 index 99 exceeds matrix dimension 97

Может ли кто-нибудь помочь мне понять, почему здесь возвращается ошибка индекса, если изменяется только порядок значений? диапазон соответствует. Связано ли это с разреженностью?
MRE:
df = pd.DataFrame({
"user_id": np.random.randint(0, 75, 300),
"item_id": np.random.randint(0, 100, 300),
"rating": np.random.randint(0, 10, 300)
})

def mappings(df, user_id, item_id):
user_id_idx_mapping = dict(zip( df[user_id].unique(), range(df[user_id].nunique()) ))
user_idx_id_mapping = dict(zip( range(df[user_id].nunique()), df[user_id].unique() ))

item_id_idx_mapping = dict(zip( df[item_id].unique(), range(df[item_id].nunique()) ))
item_idx_id_mapping = dict(zip( range(df[item_id].nunique()), df[item_id].unique() ))

return user_id_idx_mapping, user_idx_id_mapping, item_id_idx_mapping, item_idx_id_mapping

user_id_idx_mapping, user_idx_id_mapping, item_id_idx_mapping, item_idx_id_mapping = mappings(df, "user_id", "item_id")

N = df["user_id"].nunique()
M = df["item_id"].nunique()

user_idx = [user_id_idx_mapping[int(j)] for j in df["user_id"]]
item_idx = [item_id_idx_mapping[int(l)] for l in df["item_id"]]

true = dict(zip([int(k) for k in list(df["user_id"].values)], user_idx))

X_works = csr_matrix(
(df["rating"], (item_idx, user_idx)),
shape=(M, N)
)

X_doesnt = csr_matrix(
(df["rating"], (df["item_id"], df["user_id"])),
shape=(M, N)
)

print(true)


Подробнее здесь: https://stackoverflow.com/questions/792 ... -dataframe
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»