我正在尝试使用预先计算的距离值在非常稀疏的矩阵上显示tsne,但我遇到了麻烦。
归结为:
row = np.array([0, 2, 2, 0, 1, 2])
col = np.array([0, 0, 1, 2, 2, 2])
distances = np.array([.1, .2, .3, .4, .5, .6])
X = csc_matrix((distances, (row, col)), shape=(3, 3))
Y = TSNE(metric='precomputed').fit_transform(X)
然而,我收到此错误:
TypeError:传递了稀疏矩阵,但需要密集数据 方法= “barnes_hut”。使用X.toarray()转换为密集的numpy数组 如果数组足够小,以适应内存。除此以外 考虑降维技术(例如TruncatedSVD)
我不想执行TruncatedSVD,因为我已经计算了距离。
如果我更改method='exact'
,我会收到另一个错误(这有点可疑):
NotImplementedError:> =和< =不能与0一起使用。
注意:我的距离矩阵大约是100k x 100k,大约有1M非零值。
有什么想法吗?
答案 0 :(得分:0)
我认为这可以解决您的问题:
X = csr_matrix((distances, (row, col)), shape=(3, 3)).todense()
如果您确实使用csr_matrix而不是csc_matrix