从 Numpy 中的变点构造分段函数
Constructing piecewise function from changepoints in Numpy
我想从 python 中的变点构造一个分段函数。我希望我的输入和输出很大,所以速度很重要。
输入:
- int numpy 数组:
A = [1,7, 1000, 1500]
- bool numpy array:
B = [True, False, True, True, False, True, False, False]
其中 A
的长度等于 B
中 True
的个数
输出:
- int numpy 数组:
C = [1, 1, 7, 1000, 1000, 1500, 1500, 1500]
其中 C
的长度与 B
的长度相同
基本上 A
的每个元素都会重复,直到 B
中的下一个 True
出现,在这种情况下,将使用 A
的下一个元素。
In [1]: import numpy
In [2]: A = numpy.array([1, 7, 1000, 1500])
In [3]: B = numpy.array([True, False, True, True, False, True, False, False])
In [4]: A[B.cumsum() - 1]
Out[4]: array([ 1, 1, 7, 1000, 1000, 1500, 1500, 1500])
B.cumsum() - 1
计算 A 的哪个元素用于输出的每个元素,然后 A[B.cumsum() - 1]
提取这些元素。您也可以想出一种方法来使用 numpy.repeat
来做到这一点。
我想从 python 中的变点构造一个分段函数。我希望我的输入和输出很大,所以速度很重要。
输入:
- int numpy 数组:
A = [1,7, 1000, 1500]
- bool numpy array:
B = [True, False, True, True, False, True, False, False]
其中A
的长度等于B
中
True
的个数
输出:
- int numpy 数组:
C = [1, 1, 7, 1000, 1000, 1500, 1500, 1500]
其中C
的长度与B
的长度相同
基本上 A
的每个元素都会重复,直到 B
中的下一个 True
出现,在这种情况下,将使用 A
的下一个元素。
In [1]: import numpy
In [2]: A = numpy.array([1, 7, 1000, 1500])
In [3]: B = numpy.array([True, False, True, True, False, True, False, False])
In [4]: A[B.cumsum() - 1]
Out[4]: array([ 1, 1, 7, 1000, 1000, 1500, 1500, 1500])
B.cumsum() - 1
计算 A 的哪个元素用于输出的每个元素,然后 A[B.cumsum() - 1]
提取这些元素。您也可以想出一种方法来使用 numpy.repeat
来做到这一点。