Numpy dizisindeki belirli sütunları çıkarma


164

Bu kolay bir soru ama bir MxN matrisim olduğunu söyleyin. Tek yapmak istediğim belirli sütunları ayıklamak ve başka bir numpy dizisinde saklamak ama geçersiz sözdizimi hataları alıyorum. İşte kod:

extractedData = data[[:,1],[:,9]]. 

Yukarıdaki satır yeterli gibi görünüyor ama sanmıyorum. Etrafa baktım ama bu özel senaryo ile ilgili sözdizimi açısından hiçbir şey bulamadım.

Yanıtlar:


272

Sütun istediğini sanıyorum 1ve 9? Yani en

data[:, [1, 9]]

Veya isimlerle:

data[:, ['Column Name1','Column Name2']]

İsimleri şuradan alabilirsiniz data.dtype.names


Sütun adlarıyla nasıl yapılır?
Zelphir Kaltstahl

9
data [:, ['Sütun Adı1', 'Sütun Adı2']]
kod suikastçı

bir görünüm mü yoksa kopya mı? darboğazım bu hatta optimize etmek için arama yolu
Fractale

1
bu işlev artık çalışmıyor olabilir mi?
PV8

Bu sözdizimine ne denir?
Burrito

29

Bu kod pasajıyla sütun 1 ve 9'u almak istediğinizi varsayarsak, şöyle olmalıdır:

extractedData = data[:,[1,9]]

14

yalnızca bazı sütunları ayıklamak istiyorsanız:

idx_IN_columns = [1, 9]
extractedData = data[:,idx_IN_columns]

belirli sütunları hariç tutmak istiyorsanız:

idx_OUT_columns = [1, 9]
idx_IN_columns = [i for i in xrange(np.shape(data)[1]) if i not in idx_OUT_columns]
extractedData = data[:,idx_IN_columns]

9

Belirtmek istediğim bir şey, ayıklamak istediğiniz sütun sayısı 1 ise, elde edilen matris beklediğiniz gibi bir Mx1 Matrisi değil, bunun yerine ayıkladığınız sütun öğelerini içeren bir dizi olacaktır.

Matrisi dönüştürmek için , sonuç dizisinde yeniden şekillendirme (M, 1) yöntemi kullanılmalıdır.


2
Ayrıca, örneğin bir kolon kullanarak bunu başarabilirsiniz data[:, 8:9]. Bu sekiz sütunu alır, ancak fazladan boyutu kaldırmaz.
Jan Kukacka

data [:, 8] 8. sütunu seçecek ve bir
Mx1

5

Sadece:

>>> m = np.matrix(np.random.random((5, 5)))
>>> m
matrix([[0.91074101, 0.65999332, 0.69774588, 0.007355  , 0.33025395],
        [0.11078742, 0.67463754, 0.43158254, 0.95367876, 0.85926405],
        [0.98665185, 0.86431513, 0.12153138, 0.73006437, 0.13404811],
        [0.24602225, 0.66139215, 0.08400288, 0.56769924, 0.47974697],
        [0.25345299, 0.76385882, 0.11002419, 0.2509888 , 0.06312359]])
>>> m[:,[1, 2]]
matrix([[0.65999332, 0.69774588],
        [0.67463754, 0.43158254],
        [0.86431513, 0.12153138],
        [0.66139215, 0.08400288],
        [0.76385882, 0.11002419]])

Sütunların sırayla olması gerekmez:

>>> m[:,[2, 1, 3]]
matrix([[0.69774588, 0.65999332, 0.007355  ],
        [0.43158254, 0.67463754, 0.95367876],
        [0.12153138, 0.86431513, 0.73006437],
        [0.08400288, 0.66139215, 0.56769924],
        [0.11002419, 0.76385882, 0.2509888 ]])

2

Şunun gibi bir liste kullanarak ND dizisinden sütun seçerken dikkat etmeniz gereken bir şey daha var:

data[:,:,[1,9]]

Bir boyutu kaldırıyorsanız (örneğin, yalnızca bir satır seçerek), elde edilen diziye (bazı nedenlerden dolayı) izin verilir . Yani:

print data.shape            # gives [10,20,30]
selection = data[1,:,[1,9]]
print selection.shape       # gives [2,20] instead of [20,2]!!

1

Kullanabilirsiniz :

extracted_data = data.ix[:,['Column1','Column2']]


2
İyi bir cevap her zaman ne yapıldığını ve neden sadece OP için değil, SO'ya gelecekteki ziyaretçiler için de bu şekilde yapıldığına dair bir açıklama olacaktır. Lütfen başkalarının anlaması için biraz açıklama ekleyin.
Rucha Bhatt Joshi


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.