如何通过numpy或scipy切割不等式区间

时间:2016-10-23 04:32:42

标签: python numpy scipy

我有numpy 2d数组A = [[1,1,1,1,1],[1,2,3,4,5]]

我想要一个函数(A,B,轴)来分配间隔,这会产生结果

([[1,1],[1,2]],[[1,1,1],[2,3,4]],[[1,1],[4,5]])

,有效地使用区间位置B=[0,1,3,4]axis=0。另外,对于使用生成器的每个切片矩阵的延迟分配,它会更好,因为这些矩阵的大小可能非常大。 我知道通过for循环很容易实现并产生迭代器,但我不能尽可能地使用循环来实现性能。

你知道最好的方法吗?

以我的思维方式,

 def assign_interval(A,B,axis):
     if axis == 0:
        for i in range(len(B)-1):
            yield A[:,B[i]:B[i+1]]
     else:
        for i in range(len(B)-1):
            yield A[B[i]:B[i+1],:]

修改

我道歉我的代码没有工作。我今天真的很忙,所以我无法很好地检查上面的代码,而且它的目的是为了理解代码。我想要的过程。但是,这段代码犯了太多错误。现在,代码已经修改,工作正常。

list(assign_interval(A,B,0))

结果

[array([[1],
    [1]]), array([[1, 1],
    [2, 3]]), array([[1],
    [4]])]

在我的环境中。

1 个答案:

答案 0 :(得分:1)

您只需使用np.split -

即可
def assign_interval_split(A,B,axis):
    if axis == 0:
        return np.split(A[:,B[0]:B[-1]],B-B[0],axis=1)[1:-1]
    else:
        return np.split(A[B[0]:B[-1]],B-B[0],axis=0)[1:-1]