Cython'da, rasgele boyut çok boyutlu bir matrisinin birkaç ekseni boyunca karışabilen NaN güvenli bir karıştırma yordamı uygulamak için çalışıyorum. Çok boyutlu büyük işlemek için bu algoritma uzatmakÇok boyutlu dizilerin yerinde karıştırılması
def shuffle1D(np.ndarray[double, ndim=1] x):
cdef np.ndarray[long, ndim=1] idx = np.where(~np.isnan(x))[0]
cdef unsigned int i,j,n,m
randint = np.random.randint
for i in xrange(len(idx)-1, 0, -1):
j = randint(i+1)
n,m = idx[i], idx[j]
x[n], x[m] = x[m], x[n]
ben gibi olacaktır: 1B matrisin basit durumda
, bir sadece Fisher-Yates algoritması kullanılarak değerlerinin olmayan NaN tüm indisleri üzerinde karitirabilirsiniz yeniden şekillendirilmemiş diziler (burada dikkate alınmayan daha karmaşık durumlar için bir kopyasını tetikler). Bu amaçla, sabit girdi boyutundan kurtulmam gerekecek, ki bu da numt dizileriyle veya Cython'daki bellek görüntüleriyle mümkün görünmüyor. Bir çözüm var mı?
Şimdiden çok teşekkürler!
Sorun sadece rasgele bir sayıya sahip mi? – Veedrac
Girişin boyutu bilinmediğinde kaç tane döngü kullanacaksınız? –
@moarningsun bir genel durum için herhangi bir eksen boyunca hafızayı taramak için dizi adımlarını kullanmak mümkündür ... –