Sen random selection without replacement
için isteğe bağlı replace=False
ile np.random.choice
kullanmak ve düzleştirilmiş üzerinde olanlar kullanabilirsiniz: vermektedir
import numpy as np
M = 10;
N = 5;
c = 15;
A = np.random.randn(M,N)
mask=np.zeros(M*N,dtype=bool)
mask[:c] = True
np.random.shuffle(mask)
mask=mask.reshape(M,N)
A[mask] = np.nan
(
A.ravel()[np.random.choice(A.size, c, replace=False)] = np.nan
(
.ravel()
ile bitti) sürümü
Numune çalışma - ya sizinki ya
In [100]: A
Out[100]:
array([[-0.35365726, 0.26754527, -0.44985524, -1.29520237, 2.01505444],
[ 0.01319146, 0.65150356, -2.32054478, 0.40924753, 0.24761671],
[ 0.3014714 , -0.80688589, -2.61431163, 0.07787956, 1.23381951],
[-1.70725777, 0.07856845, -1.04354202, -0.68904925, 1.07161002],
[-1.08061614, 1.17728247, -1.5913516 , -1.87601976, 1.14655867],
[ 1.12542853, -0.26290025, -1.0371326 , 0.53019033, -1.20766258],
[ 1.00692277, 0.171661 , -0.89646634, 1.87619114, -1.04900026],
[ 0.22238353, -0.6523747 , -0.38951426, 0.78449948, -1.14698869],
[ 0.58023183, 1.99987331, -0.85938155, 1.4211672 , -0.43369898],
[-2.15682219, -0.6872121 , -1.28073816, -0.97523148, -2.27967001]])
In [101]: A.ravel()[np.random.choice(A.size, c, replace=False)] = np.nan
In [102]: A
Out[102]:
array([[ nan, 0.26754527, -0.44985524, nan, 2.01505444],
[ 0.01319146, 0.65150356, -2.32054478, nan, 0.24761671],
[ nan, -0.80688589, nan, nan, 1.23381951],
[ nan, nan, -1.04354202, -0.68904925, 1.07161002],
[-1.08061614, 1.17728247, -1.5913516 , nan, 1.14655867],
[ 1.12542853, nan, -1.0371326 , 0.53019033, -1.20766258],
[ nan, 0.171661 , -0.89646634, nan, nan],
[ 0.22238353, -0.6523747 , -0.38951426, 0.78449948, -1.14698869],
[ 0.58023183, 1.99987331, -0.85938155, nan, -0.43369898],
[-2.15682219, -0.6872121 , -1.28073816, -0.97523148, nan]])
Oh, bu benim yolumdan biraz daha zarif! – tom
Ayrıca uygulama için np.random.choice' np.random.randint (0, yüksek = A.size, size = c) 'ile de değiştirebilirim (değiştirme gerçekten önemli değil). Ancak, ravel() 'den sonra dizi neden düz kalmıyor? – Oleg
@OlegKomarov 'np.random.randint' tekrarlanan indeksleri verebilir, bu yüzden sizin durumunuzda işe yarayacağını düşünmüyorum. '.ravel()' şeyiyle ilgili olarak, bu yalnızca bir ['' '' '' '' '' '' '' (http://stackoverflow.com/questions/4370745/view-onto-a-numpy-dizisi) 'dır, yani bellekte tam olarak düzleşmiyor. Yani, "düzleştirilmiş görünüm" bir 2D dizi olarak tutulurken, dizinlenir ve NaN olarak ayarlanır. – Divakar