Bạn có thể sử dụng np.random.choice
với tùy chọn replace=False
cho random selection without replacement
và sử dụng cả những chiếc xe phẳng phiên bản của A
(được thực hiện với .ravel()
), giống như vậy -
A.ravel()[np.random.choice(A.size, c, replace=False)] = np.nan
Chạy mẫu -
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]])
Ồ, đó là một chút thanh lịch hơn con đường của tôi! – tom
Tôi đoán tôi cũng có thể thay thế 'np.random.choice' bằng' np.random.randint (0, cao = A.size, size = c) 'cho ứng dụng của tôi (nếu thay thế không thực sự quan trọng). Tuy nhiên, tại sao mảng không giữ nguyên sau khi 'ravel()'? – Oleg
@OlegKomarov 'np.random.randint' có thể cung cấp cho bạn các chỉ mục lặp lại, vì vậy tôi không nghĩ rằng điều đó sẽ hiệu quả trong trường hợp của bạn. Về điều '.ravel()', nó chỉ là ['view'] (http://stackoverflow.com/questions/4370745/view-onto-a-numpy-array), vì vậy nó không chính xác làm phẳng trong bộ nhớ. Vì vậy, "xem phẳng" được lập chỉ mục và thiết lập là NaN, trong khi được giữ như là một mảng 2D. – Divakar