Değerleri tanımlamak için satır ve sütunun bir işlevini belirterek numpy ndarray oluşturmak istiyorum.Nümerik bir ndarray'ı her satırda ve sütunda çağrılan bir işlevle nasıl verimli bir şekilde doldurabilirim?
Örneğin, böyle bir şey yapabilmek istiyorum (tamamen yanlış sözdizimi, ama fikir almalısınız):
>>> np.ndarray((2,3), lambda r,c: 3*r+c)
[[ 0 1 2]
[ 3 4 5]]
çevrimiçi arama yaşadım gerçi, hiçbir şey vermiştir sorun ... bunun aramak için tam olarak nasıl şu anda var
(eşdeğer) aşağıdaki kod düşünme, ama korkunç verimsiz:
Maalesefdef ndarrayFuncFill(size, func):
z = np.empty(size)
for r in np.arange(size[0]):
for c in np.arange(size[1]):
z[r][c] = func(r,c)
return z
>>> ndarrayFuncFill((2,3), lambda r,c: 3*r+c)
array([[ 0., 1., 2.],
[ 3., 4., 5.]])
, özellikle bunu şu anda kullanmak istediğim işlev, ufak bir şekilde ya da bunun gibi bir şey olarak kolayca yeniden yazabileceğim bir şey değildir. Bunu kara kutu olarak görmek zorundayım.
Aslında bunu (yukarıdaki lambda kadar basit bir şeyle değil) ile kullanmakla ilgilendiğim işlev, yayınlama iznim yok. Ancak, esas olarak bir arama tablosunda enterpolasyon yapar. Yani bir satır ve sütun verirsiniz ve bunu bir arama tablosundaki endekslere çevirirsiniz - ancak sadece bire bir arama olmadığı bazı zor şeyler vardır, bazen 'yakın' bir arada değerler ve bu tür şeyler. Yani, bu en verimli fonksiyon değil, ama iç içe geçmiş döngüler gibi çok fazla miktarda saçma atık kaynağım olmamasını tercih ediyorum.
Herhangi bir öneriniz var mı?
neden bu kadar biz onu (ya basitleştirilmiş örnek görebilirsiniz işlevini katmayan)? Ayrıca [mcve] 'ye bir göz atın. – roadrunner66
Maalesef tam kodu yayınlama iznim yok, ancak soru bildirimine daha fazla bilgi ekleyeceğim. Tavsiye için teşekkür ederim! –
'lookup' olarak belirttiğiniz düzenlemeye bağlı olarak,' np.searchsorted' kullanabilirsiniz. İlgili kullanım durumları için Stackoverflow aracılığıyla arama yapmaktan çekinmeyin: http://stackoverflow.com/search?q=%5Bnumpy%5D+np.searchsorted – Divakar