numpy 每4个值检查一次,并相应地更改np数组中的值

k5ifujac  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(116)

你好,我有一个0和1的np数组。我想检查每4个值,如果至少有一个(1),把所有四个值等于(1)。否则,让他们都为零。
你知道怎么做吗?谢谢,这是一个样品

np= [ 0 0 0 0 1 1 1 1 0 0 1 0 0 0 0 0 ]

np_corrected=np= [ 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 ]

非常感谢,希望问题现在已经清楚了!

ctehm74n

ctehm74n1#

可能不是最短的解决方案,但绝对有效且快速:
1.整形
1.创建遮罩
1.应用遮罩并获得结果:

import numpy as np
array = np.array([0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0])
array
groups = array.reshape(-1, 4)  # group every 4 elements into new columns
groups
mask = groups.sum(axis=1)>0  # identify groups with at least one '1'
mask
np.logical_or(groups.T, mask).T.astype(int).flatten()
# swap rows and columns in groups, apply mask, swap back, 
# replace True/False with 1/0 and restore original shape

返回(在Jupyter笔记本中):

array([0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0])
array([[0, 0, 0, 0],
       [1, 1, 1, 1],
       [0, 0, 1, 0],
       [0, 0, 0, 0]])
array([False,  True,  True, False])
array([0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0])

相关问题