2016-03-23 17 views
2

0s ve 1s ile bir vektör var. Bir eşleme kuralı ile bir vektör var oysa, yeniden düzenlenmiş değerleri ile yeni bir vektör istiyorum:Yinelenen vektörü eşleme kuralına göre yeniden düzenleme

Örnek: eşleme vektörü her bir dizin için tespit

input: 1,0,0,1 
rule: 0,3,2,1 
after mapping:1,1,0,0 

yeni vektör değer olan indeksi en bulunabilir.

Bunu nasıl yaparım?

+1

Eşleme kuralını anlamıyorum. 0, 3, 1, 2 mi demek istediniz? – kazemakase

+2

'a = np.asarray ([1,0,0,1]); b = np.asarray ([0,3,1,2]); a [b] ' – Bort

+0

@Bort Bu OP'nin istediği şeyi yapmaz: cevabımı gör. – FTP

cevap

0

Diyelim ki a özgün dizidir ve b eşleme kuralıdır. eşleme kuralı "değeri bulunabilir yeni vektörü hangi indeks de" ise, c permütasyon b ait ters olduğu a[c] hesaplamamız gerekir diyor beri.

c = np.zeros(b.size, b.dtype) 
c[b] = np.arange(b.size) 
new_array = a[c] 

Örnek: Ben oradan çözümlerden birini seçeceğiz böylece ters permütasyon hesaplanması, addressed in detail elsewhere bir [7, 8, 9] ve b [1, 2, 0] ise, bu [9, 7, 8] döndürür. , 2 konumuna gitti

  • 7 1 konumuna gitti sonuç doğrudur 0

konumlandırmak için gitti: Kontrol edelim. Bort önerdiği gibi a[b] yaptıysak


, sonuç farklıdır [8, 9, 7], olurdu. sayılar orijinal dizideki nereden geldiğini Nitekim bu sürümde b ait girişler ki:

  • 9 pozisyondan geldi pozisyondan geldi 2
  • 7 pozisyonunda 0
  • geldi

verdiğin örnek onun tersine eşittir bir permütasyon, bu nedenle ayrım kaybolur, konuyu geçinip belirleyin.

İlgili konular