2012-09-03 129 views
6

如果您有两个numpy矩阵,您如何将它们合并为一个?他们应水平加入,使加入两个numpy矩阵

[[0]   [1]    [[0][1] 
[1]  + [0]   =  [1][0] 
[4]   [1]    [4][1] 
[0]]  [1]]    [0][1]] 

例如,对于这些矩阵:

>>type(X) 
>>type(Y) 
>>X.shape 
>>Y.shape 
<class 'numpy.matrixlib.defmatrix.matrix'> 
<class 'numpy.matrixlib.defmatrix.matrix'> 
(53, 1) 
(53, 1) 

我已经试过hstack却得到一个错误:

>>Z = hstack([X,Y]) 

Traceback (most recent call last): 
    File "labels.py", line 85, in <module> 
    Z = hstack([X, Y]) 
    File "C:\Python27\lib\site-packages\scipy\sparse\construct.py", line 263, in h 
stack 
    return bmat([blocks], format=format, dtype=dtype) 
    File "C:\Python27\lib\site-packages\scipy\sparse\construct.py", line 329, in b 
mat 
    raise ValueError('blocks must have rank 2') 
ValueError: blocks must have rank 2 
+0

它应该工作。奇怪的是,你的错误信息指的是稀疏矩阵,而你的类型(X)表示你有矩阵而不是稀疏矩阵。 –

回答

12

从回溯来看,看起来你已经完成了from scipy.sparse import *或类似的工作,因此numpy.hstackscipy.sparse.hstack所遮蔽。 numpy.hstack正常工作:

>>> X = np.matrix([[0, 1, 4, 0]]).T 
>>> Y = np.matrix([[1, 0, 1, 1]]).T 
>>> np.hstack([X, Y]) 
matrix([[0, 1], 
     [1, 0], 
     [4, 1], 
     [0, 1]]) 
+0

+1谢谢..是的,我正在使用'scipy.sparse.hstack'! – Zach

+0

@Zach:不客气。有点不幸的是'scipy.sparse.hstack'不能处理稠密矩阵。 –

+1

这就是为什么你应该学会阅读错误信息:) –