我想在Cython中實現一個NaN安全的混洗過程,該過程可以沿任意維度的多維矩陣的多個軸進行混洗。多維數組就地混洗
在一維矩陣的簡單情況,可以簡單地打亂了非NaN的所有指數值使用費雪耶茨算法:
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]
我想延長這種算法來處理大型多維沒有重塑的數組(這觸發了更復雜的情況下副本,這裏不考慮)。爲此,我需要擺脫固定的輸入維度,這在Cython中似乎既不可能用numpy數組也不可能。有沒有解決方法?
非常感謝提前!
那麼問題只是有任意數量的維度? – Veedrac 2014-09-29 18:15:56
當輸入的維數未知時,您將使用多少個for循環? – 2014-09-29 20:37:28
@moarningsun有可能使用數組步幅來掃描一般情況下任何軸上的內存...... – 2014-09-30 11:31:47