将一个稀疏矩阵的所有行添加到另一个矩阵中的方法(scipy)

7
我有一个numpy矩阵,想要向其中添加另一个矩阵。
这两个矩阵的形状分别为:
m1.shape = (2777, 5902)  m2.shape = (695, 5902)

我想将m2添加到m1中,使得新的矩阵形状为:
m_new.shape = (3472, 5902)

当我使用numpy.append或numpy.concatenate时,我只会得到一个新的数组,其中包含两个矩阵,形状为(2,1)。
你们中有人有什么办法可以将这两个矩阵合并成一个大矩阵吗?
额外信息:它们都是稀疏矩阵。
编辑: m1看起来像
(0, 1660)   0.444122811195
(0, 3562)   0.260868771714
(0, 4743)   0.288149437574
(0, 4985)   0.514889706991
(0, 5215)   0.272163636657
(0, 5721)   0.559006134727
(1, 555)    0.0992498400527
(1, 770)    0.133145289523
(1, 790)    0.0939044698233
(1, 1097)   0.259867567986
(1, 1285)   0.188836288168
(1, 1366)   0.24707459927
(1, 1499)   0.237997843516
(1, 1559)   0.120069347224
(1, 1701)   0.17660176488
(1, 1926)   0.185678520634
(1, 2177)   0.163066377369
(1, 2641)   0.079958199952
(1, 2937)   0.259867567986
(1, 3551)   0.198471489351
(1, 3562)   0.0926197593026
(1, 3593)   0.100537828805
(1, 4122)   0.198471489351
(1, 4538)   0.57162654484
(1, 4827)   0.105808609537

m2看起来像:

(0, 327)    0.0770581299315
  (0, 966)  0.309858753157
  (0, 1231) 0.286870892505
  (0, 1384) 0.281385698712
  (0, 1817) 0.204495931592
  (0, 2284) 0.182420951496
  (0, 2414) 0.114591086901
  (0, 2490) 0.261442040482
  (0, 3122) 0.321676138471
  (0, 3151) 0.286870892505
  (0, 4031) 0.172251612658
  (0, 5149) 0.25839783806
  (0, 5215) 0.125806303262
  (0, 5225) 0.336280781816
  (0, 5231) 0.135930403721
  (0, 5294) 0.145049459537
  (0, 5794) 0.20145172917
  (0, 5821) 0.224439589822
  (1, 327)  0.191031948626
  (1, 1171) 0.62081265022

矩阵的类型是:

<class 'scipy.sparse.csr.csr_matrix'> <class 'scipy.sparse.csr.csr_matrix'>

已解决:

m_new = scipy.sparse.vstack((m1, m2))

做到了
感谢您的帮助。

你应该从一开始就告诉我们这些是“scipy sparse” - 并相应地标记问题。 - hpaulj
抱歉,我已根据需要修改了问题。如果有人正在寻找这方面的信息,请查看更新后的内容。 - d.a.d.a
2个回答

1
你可以在这种情况下使用numpy.vstack(或者在矩阵形状为(x,y)和(x,z)时使用numpy.hstack)。
示例:
a = np.zeros((3,7))
b = np.zeros((46,7))
c = np.vstack((a,b))
print c.shape
#(49,7)

如果我这样做,我会得到以下结果:[[<2777x5902稀疏矩阵,类型为'<class 'numpy.float64'>' 在压缩稀疏行格式中存储了54003个元素>] [<695x5902稀疏矩阵,类型为'<class 'numpy.float64'>' 在压缩稀疏行格式中存储了12226个元素>]]这不是我想要的,因为这是一个包含两个矩阵的新数组,但我想要一个矩阵作为输出。 - d.a.d.a
3
使用scipy.sparse.vstack代替numpy vstack时工作正常。 - d.a.d.a

-2

@d.a.d.a 你确定将这两个数组/矩阵放到一个元组np.concatenate((m1, m2))中了吗?注意双重括号。 - Julien Spronck
是的,我的代码是 cross_val_matrix = np.concatenate((train_matrix, test_matrix)),而训练和测试矩阵的形状就像问题中提到的 m1 和 m2 一样。 - d.a.d.a
@d.a.d.a 奇怪...如果你复制/粘贴我写下的例子(a = np.zeros((5, 3)); ...),它能工作吗?如果你执行print type(train_matrix), type(test_matrix),你会看到什么? - Julien Spronck
使用scipy.sparse.vstack而不是numpy vstack时可以正常工作。 - d.a.d.a
感谢您的帮助 :-) - d.a.d.a
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接