2012-09-03 29 views
6

Jeśli masz dwie matryce z numeracją, jak możesz połączyć je w jeden? Powinny one być połączone w poziomie, tak żełączenie dwóch niewyprawionych matryc

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

na przykład z tych matryc:

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

Próbowałem hstack ale pojawia się błąd:

>>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

Powinno działać. Co dziwne, twój komunikat o błędzie odnosi się do rzadkich macierzy, podczas gdy twój typ (X) mówi, że macie macierze, a nie rzadkie macierze. –

Odpowiedz

12

sądząc z traceback, Wygląda na to, że zrobiłeś from scipy.sparse import * lub coś podobnego, dzięki czemu numpy.hstack jest zacieniony przez scipy.sparse.hstack. numpy.hstack działa bez zarzutu:

>>> 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 dzięki .. ah tak, zamiast tego użyłem 'scipy.sparse.hstack'! – Zach

+0

@Zach: nie ma za co. To trochę niefortunne, że 'scipy.sparse.hstack' nie radzi sobie z gęstymi macierzami. –

+1

Dlatego powinieneś nauczyć się czytać komunikaty o błędach :) –