嗨我有两个数组如下。
1)由1和0组成的数组.1表示它是活跃的一天,0是假日。
2)与阵列1相比长度较小的算术序列。
结果数组必须是1)&的组合。 2)其中算术序列需要遵循1s的位置。换句话说,阵列2需要扩展到阵列1长度,其中0s插入与阵列1相同的位置。
我可以解决这个问题的一种方法是使用numpy.insert和slice。但是,由于长度不同而且阵列1是动态的,我需要一种有效的方法来实现这一点。
由于
答案 0 :(得分:1)
创建填充0的正确长度(len(binary)
)的结果数组,然后使用binary
数组作为掩码分配到结果数组中。确保binary
掩码属于bool
dtype。
>>> binary = np.array([1, 1, 0, 1, 0, 1, 1, 0, 1, 0], dtype=bool)
>>> arithmetic = np.arange(1, 7)
>>> result = np.zeros(len(binary), dtype=arithmetic.dtype)
>>> result[binary] = arithmetic
>>> result
array([1, 2, 0, 3, 0, 4, 5, 0, 6, 0])
答案 1 :(得分:1)
另一种单线解决方案
<强>设置强>
binary = np.array([1, 1, 0, 1, 0, 1, 1, 0, 1, 0])
arithmetic = np.arange(1, 7)
<强>解决方案强>
#find 1s from binary and set values from arithmetic
binary[np.where(binary>0)] = arithmetic
Out[400]: array([1, 2, 0, 3, 0, 4, 5, 0, 6, 0])
答案 2 :(得分:0)
另一种方法是创建二进制数组的副本并用算术数组替换所有非零值
seq = np.arange(1, len(bi_arr[bi_arr != 0])+1)
final_result = bi_arr.copy()
final_result[final_result != 0] = seq
打印(final_result)
array([1, 2, 0, 3, 0, 4, 5, 0, 6, 0])
bi-arr保持不变