下面的操作我必须多次进行.使用numpy函数而不是循环,我通常会获得非常好的性能,但我无法将其复制到更高维度的数组中.欢迎任何建议或替代方案:
我有一个布尔数组,我想将真索引传播到接下来的2个位置,例如:
如果该一维数组(A)是:
import numpy as np
# Number of positions to propagate the array
propagation = 2
# Original array
A = np.array([False, True, False, False, False, True, False, False, False, False, False, True, False])
我可以创建一个"空"数组,然后找到索引、传播它们,然后拉平 在哪里,然后压平它:
B = np.zeros(A.shape, dtype=bool)
# Compute the indeces of the True values and make the two next to it True as well
idcs_true = np.argwhere(A) + np.arange(propagation + 1)
idcs_true = idcs_true.flatten()
idcs_true = idcs_true[idcs_true < A.size] # in case the error propagation gives a great
B[idcs_true] = True
# Array
print(f'Original array A = {A}')
print(f'New array (2 true) B = {B}')
其中给出:
Original array A = [False True False False False True False False False False False True
False]
New array (2 true) B = [False True True True False True True True False False False True
True]
然而,这会变得更加复杂并且失败,例如:
AA = np.array([[False, True, False, False, False, True, False, False, False, False, False, True, False],
[False, True, False, False, False, True, False, False, False, False, False, True, False]])
感谢任何建议.