如何用numpy或scipy切片不等式区间

2024-03-29 06:30:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我需要一个函数(a,B,axis)来指定间隔,结果是

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

,有效地使用间隔位置B=[0,1,3,4]axis=0。此外,最好像使用生成器一样延迟分配每个片矩阵,因为这些矩阵可能非常大。 我知道通过for循环和yield迭代器很容易实现,但我不尽可能使用loop来提高性能。你知道吗

你知道最好的方法吗?你知道吗

在我看来

 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]])]

在我的环境里。你知道吗


Tags: 函数代码infor间隔lenrange矩阵
1条回答
网友
1楼 · 发布于 2024-03-29 06:30:57

你可以用^{}-

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]

相关问题 更多 >