NumPy broadcasting
-
(a[:,None]==b).astype(int)
Numune koşmak -
In [107]: (a[:,None]==b)*1
Out[107]:
array([[1, 0, 0],
[1, 0, 0],
[0, 0, 1],
[0, 1, 0],
[0, 1, 0],
[0, 1, 0]])
-
In [104]: a
Out[104]: array([5, 5, 3, 4, 4, 4])
In [105]: b
Out[105]: array([5, 4, 3])
In [106]: (a[:,None]==b).astype(int)
Out[106]:
array([[1, 0, 0],
[1, 0, 0],
[0, 0, 1],
[0, 1, 0],
[0, 1, 0],
[0, 1, 0]])
ise en basit yaparak, kompakt demek, burada tip dönüşüm yapmak için bir modifiye biri Açıklama:None
is Yeni bir eksen eklemek için kullanılan numpy.newaxis
için bir diğer ad (length=1
ile eksen). Yani, bu durumda, a[:,None]
ile a
'un 2D
sürümünü alırız. Bu 2D
sürümü, a.reshape(-1,1)
bunlardan biri olmak için çeşitli yollar vardır. Bu, 1D
b
ile karşılaştırıldığı zaman broadcasting
için izin verir, sonuçta bir 2B dizi eşleşmeler, bir boole dizisi oluşur. Son adım, int
dizisine dönüştürmektir.
Adım adım çalıştırma -
In [141]: a
Out[141]: array([5, 5, 3, 4, 4, 4])
In [142]: b
Out[142]: array([5, 4, 3])
In [143]: a[:,None]
Out[143]:
array([[5],
[5],
[3],
[4],
[4],
[4]])
In [144]: a[:,None] == b
Out[144]:
array([[ True, False, False],
[ True, False, False],
[False, False, True],
[False, True, False],
[False, True, False],
[False, True, False]], dtype=bool)
In [145]: (a[:,None] == b).astype(int)
Out[145]:
array([[1, 0, 0],
[1, 0, 0],
[0, 0, 1],
[0, 1, 0],
[0, 1, 0],
[0, 1, 0]])
çok teşekkür ederiz! Tam olarak aradığım şey buydu. – David
'a [:, Yok]' a.reshape (-1,1) 'ile eşdeğer gibi görünüyor. Bunun tam olarak nasıl çalıştığını açıklayabilir misiniz? – David
@David Gönderiye birkaç yorum ekledi. Umarım yardım ederler! – Divakar