2013-01-18 34 views
2

說我有充滿隨機整數通過調零非採樣值來對numpy數組進行採樣?

import numpy as np 
matR = np.random.randint(-10,10,size=(4,6)) 
>>> matR = [[-4 -4 1 -8 -2 5] 
      [ 9 2 -4 -1 4 2] 
      [ 7 8 -2 -9 3 8] 
      [ 9 -3 3 6 4 3]] 

現在我知道一個矩陣「R」我喜歡這個樣吧:

>>> matR[::2,::2] = [[-4 1 -2] 
        [ 7 -2 3]] 

我真正想要的,但是,是一個乾淨的方式這樣做:

>>> matR.?? = [[-4 0 1 0 -2 0] 
       [ 0 0 0 0 0 0] 
       [ 7 0 -2 0 3 0] 
       [ 0 0 0 0 0 0]] 

我想避免python循環,這將很容易使用枚舉。

+0

您是否需要保持matR以不同的方式進行採樣,或者您真的只需要生成6個隨機數? –

回答

3

你想要這樣的東西嗎?

>>> import numpy as np 
>>> m = np.random.randint(-10,10,size=(4,6)) 
>>> m 
array([[ 7, 4, 7, 7, 5, 9], 
     [ 5, -7, -2, 4, 2, -4], 
     [ -9, 4, 6, 8, 5, -10], 
     [ -6, -8, 8, -5, 2, -3]]) 
>>> m2 = np.zeros_like(m) # or m2 = m*0 
>>> m2[::2, ::2] = m[::2, ::2] 
>>> m2 
array([[ 7, 0, 7, 0, 5, 0], 
     [ 0, 0, 0, 0, 0, 0], 
     [-9, 0, 6, 0, 5, 0], 
     [ 0, 0, 0, 0, 0, 0]]) 
+0

很聰明!是的,我喜歡這個。我應該看到它!如果有一些令人難以置信的效率我不知道,但我會堅持下去,但這很可能會發生。 – RodericDay

+0

@RodericDay:是的,等待總是一個好主意。那裏有一些真正的嚮導。 – DSM

1

如何保持面膜?

>>> import numpy as np 
>>> shape = (4,6) 
>>> m = np.random.randint(-10,10,size = shape) 
>>> mask = np.zeros(shape,dtype = np.int32) 
>>> mask[::2,::2] = 1 
>>> mask 
array([[1, 0, 1, 0, 1, 0], 
     [0, 0, 0, 0, 0, 0], 
     [1, 0, 1, 0, 1, 0], 
     [0, 0, 0, 0, 0, 0]]) 
>>> m 
array([[-7, 0, -4, -8, 0, 0], 
     [ 0, -3, -2, -1, 1, 2], 
     [ 8, -8, 5, 1, 9, 1], 
     [ 1, 0, 2, 7, 4, -8]]) 
>>> m * mask 
array([[-7, 0, -4, 0, 0, 0], 
     [ 0, 0, 0, 0, 0, 0], 
     [ 8, 0, 5, 0, 9, 0], 
     [ 0, 0, 0, 0, 0, 0]]) 
+0

這很好,但我想我會按照上面的建議去做。同樣的想法,更簡單一些。謝謝! – RodericDay

相關問題