diff --git a/cornac/data/text.py b/cornac/data/text.py
index bd0178bbe23029e21ef9dfcf78875a1eb92fd6d5..8545206cbcb4b80c0220ca8ec71cf043c0b4f6d6 100644
--- a/cornac/data/text.py
+++ b/cornac/data/text.py
@@ -951,7 +951,7 @@ class TextModality(FeatureModality):
         if binary:
             bow_mat.data.fill(1)
 
-        return bow_mat if keep_sparse else bow_mat.A
+        return bow_mat if keep_sparse else bow_mat.toarray()
 
     def batch_tfidf(self, batch_ids, keep_sparse=False):
         """Return matrix of TF-IDF features corresponding to provided batch_ids
@@ -972,7 +972,8 @@ class TextModality(FeatureModality):
 
         """
         tfidf_mat = self.tfidf_matrix[batch_ids]
-        return tfidf_mat if keep_sparse else tfidf_mat.A
+        return tfidf_mat if keep_sparse else tfidf_mat.toarray()
+
 
 class ReviewModality(TextModality):
     """Review modality
@@ -1034,6 +1035,7 @@ class ReviewModality(TextModality):
             Apply sublinear tf scaling, i.e. replace tf with 1 + log(tf).
 
     """
+
     def __init__(self,
                  data: List[tuple] = None,
                  group_by: str = None,
diff --git a/cornac/models/knn/recom_knn.py b/cornac/models/knn/recom_knn.py
index 5db7575bff86c944e85a6ff4651c8dcef1bcb0d5..9ba172143b5e6b6e9dbb5e19da661a9e68cc8ee8 100644
--- a/cornac/models/knn/recom_knn.py
+++ b/cornac/models/knn/recom_knn.py
@@ -239,7 +239,7 @@ class UserKNN(Recommender):
         if item_idx is not None:
             weighted_avg = compute_score_single(
                 True,
-                self.sim_mat[user_idx].A.ravel(),
+                self.sim_mat[user_idx].toarray().ravel(),
                 self.iu_mat.indptr[item_idx],
                 self.iu_mat.indptr[item_idx + 1],
                 self.iu_mat.indices,
@@ -251,7 +251,7 @@ class UserKNN(Recommender):
         weighted_avg = np.zeros(self.num_items)
         compute_score(
             True,
-            self.sim_mat[user_idx].A.ravel(),
+            self.sim_mat[user_idx].toarray().ravel(),
             self.iu_mat.indptr,
             self.iu_mat.indices,
             self.iu_mat.data,
@@ -412,7 +412,7 @@ class ItemKNN(Recommender):
         if item_idx is not None:
             weighted_avg = compute_score_single(
                 False,
-                self.ui_mat[user_idx].A.ravel(),
+                self.ui_mat[user_idx].toarray().ravel(),
                 self.sim_mat.indptr[item_idx],
                 self.sim_mat.indptr[item_idx + 1],
                 self.sim_mat.indices,
@@ -424,7 +424,7 @@ class ItemKNN(Recommender):
         weighted_avg = np.zeros(self.num_items)
         compute_score(
             False,
-            self.ui_mat[user_idx].A.ravel(),
+            self.ui_mat[user_idx].toarray().ravel(),
             self.sim_mat.indptr,
             self.sim_mat.indices,
             self.sim_mat.data,
diff --git a/requirements.txt b/requirements.txt
index de4ae4d02d3881a723a0eb33c2b9cd0d72ff6018..8a01f803967892d58b08c34de40469c3aafd4047 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,4 +1,4 @@
-numpy
+numpy<2.0
 scipy
 Cython
 tqdm