Yaşadığınız sorun, matris dönüşü üzerindeki işlemlerin her zaman 2 boyutlu bir dizi döndürdüğü gerçeğine iner.
ilk dizide maske inşa
elde edersiniz:
In [24]: a2[:,1] > 10
Out[24]: array([False, False, True, True, True], dtype=bool)
gördüğünüz gibi, hangi, 1 boyutlu bir dizidir. Eğer matris ile aynı şeyi yaptığınızda
elde edersiniz:
In [25]: m2[:,1] > 10
Out[25]:
matrix([[False],
[False],
[ True],
[ True],
[ True]], dtype=bool)
Başka bir deyişle, bir nx1 dizi değil n uzunluğundaki dizisi var. Numpy içinde
İndeksleme farklı bir birinden veya n boyutlu bir dizi ile indeksleme olmanıza göre çalışmaktadır.
İlk durumda
, numpy satırın endeksi olarak n uzunluğundaki dizi tedavi edecek, böylece beklenen sonucu elde edersiniz: Eğer 2 boyutlu endeksine sahip çünkü, İkinci durumda
In [28]: a2[a2[:,1] > 10]
Out[28]:
array([[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29]])
dizi, numpy satır ve sütun hem ayıklamak için yeterli bilgiye sahiptir ve bu yüzden sadece eşleştirmesi sütunu (ilki) şeyleri yakalar:
In [29]: m2[m2[:,1] > 10]
Out[29]: matrix([[12, 18, 24]])
sorunuza cevap için: ca n n uzunluğundaki başlangıçtaki dizi ayıklamak için, ilk sütunu bir diziye maskelerinizi dönüştürerek ve kapma bu davranışı olsun: Alternatif
In [32]: m2[np.array(m2[:,1] > 10)[:,0]]
Out[32]:
matrix([[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29]])
, daha önce aynı sonucu almak ilk dönüşümü yapabileceği:
In [34]: np.array(m2)[:,1] > 10
Out[34]: array([False, False, True, True, True], dtype=bool)
Şimdi bu düzeltmelerin hem oldukça çirkin olabilir matrisleri ve diziler arasındaki dönüşümleri gerektirmektedir.
Kendinize soracağım soru, neden bir matris kullanmak istediğiniz ve bir dizinin davranışını beklemenizdir. İşiniz için doğru araç aslında bir dizidir, bir matris değildir.
Teşekkür ederim, Sapi. Ben dizi ve matrisin numpy cinsinden eşdeğer olduğunu düşündüm, ama değiller. – pinseng
@pinseng Genel bir kural olarak, matris matematiği yapmanız gerekmedikçe diziye yapışmak en iyisidir (bu durumda, tanımlanan matris işlemlerinin rahatlığı, burada görülen sorunları aşabilir) – sapi
Merhaba Sapi, başka bir soru sorabilir miyim: neden np.array (2) 've' np.array ([2]) 'farklı sonuçlar verir, ancak np.mat (2)' ve 'np.mat ([2])' aynı sonuçları verir? – pinseng