2

ランダムな整数で満たされた行列「R」があるとします

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]]

今、私はそれを次のようにサンプリングできることを知っています:

>>> 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ループを避けたいのですが、enumerateを使用すると簡単にできます。

4

2 に答える 2

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]])
于 2013-01-18T17:36:51.343 に答える
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]])
于 2013-01-18T18:09:50.920 に答える