我有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]])]
在我的环境中。
答案 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]