Python 通过将非采样值归零对numpy数组进行采样?

Python 通过将非采样值归零对numpy数组进行采样?,python,numpy,Python,Numpy,假设我有一个充满随机整数的矩阵'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]] 现在我知道我可以像这样取样: >>> m

假设我有一个充满随机整数的矩阵'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很容易

你想要这样的东西吗

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

你想要这样的吗

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

戴个面具怎么样

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

戴个面具怎么样

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

非常聪明!是的,我喜欢这个。我真该看看!我会坚持下去,以防有一些我不知道的效率极高的事情发生,但这很可能会发生。@RodericDay:是的,等待总是一个好主意。那里有一些真正的巫师。非常聪明!是的,我喜欢这个。我真该看看!我会坚持下去,以防有一些我不知道的效率极高的事情发生,但这很可能会发生。@RodericDay:是的,等待总是一个好主意。这里有一些真正的奇才。你需要让matR以不同的方式采样,还是真的只需要生成6个随机数?你需要让matR以不同的方式采样,还是真的只需要生成6个随机数?这很好,但我想我会同意上面的建议。同样的想法,有点直截了当。谢谢这很好,但我想我会同意上面的建议。同样的想法,有点直截了当。谢谢