用python numpy构建一个特定的序列

时间:2017-05-04 22:59:25

标签: python arrays numpy scipy

嗨我有两个数组如下。

1)由1和0组成的数组.1表示它是活跃的一天,0是假日。

2)与阵列1相比长度较小的算术序列。

结果数组必须是1)&的组合。 2)其中算术序列需要遵循1s的位置。换句话说,阵列2需要扩展到阵列1长度,其中0s插入与阵列1相同的位置。

我可以解决这个问题的一种方法是使用numpy.insert和slice。但是,由于长度不同而且阵列1是动态的,我需要一种有效的方法来实现这一点。

由于

Final result

3 个答案:

答案 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保持不变