Python 两个数组之间循环的Numpy累积和条件
解决,读 需要一些帮助来理解numpy中的这种奇怪行为吗 我有两个数组Python 两个数组之间循环的Numpy累积和条件,python,python-2.7,numpy,cumsum,Python,Python 2.7,Numpy,Cumsum,解决,读 需要一些帮助来理解numpy中的这种奇怪行为吗 我有两个数组 A = np.array([ [5338, 300], [4970, 400], [5339, 150], ]) B = np.array([ [349154, 5338, 100], [349155, 5338, 100], [349156, 5338, 100], [349157, 53
A = np.array([ [5338, 300],
[4970, 400],
[5339, 150],
])
B = np.array([
[349154, 5338, 100],
[349155, 5338, 100],
[349156, 5338, 100],
[349157, 5338, 100],
[349158, 5338, 100],
[349159, 5338, 100],
[349159, 4970, 50],
[349160, 4970, 50],
[349179, 4970, 50],
[349181, 4970, 50],
[349192, 4970, 50],
[349113, 4970, 50],
[349124, 4970, 50],
[349135, 4970, 50],
[349146, 4970, 50],
[349157, 4970, 50],
[349178, 4970, 50],
[449124, 5339, 50],
[549135, 5339, 50],
[649146, 5339, 50],
[749157, 5339, 50],
[849178, 5339, 50]
])
bpallets = []
#We iterate array A
for a in A:
#create a mask to get values from array B where B index 1 equal's to a index 0
mask = B[:,1] == a[0]
#retrieve the values
b = B[mask]
#filter array b by conditioning cumsum to stop when it reaches the value of Array "A" index 2
reached = b[np.where(b[:,2].cumsum() >= a[1] )]
bpallets.append(reached)
其思想是在到达数组“A”索引列2中的值时停止求和,原因是在数组的第二行中
A、 条件失败:(
这是我的输出
#FIRST LOOP, OK :)
5338 300
[[349156 5338 100]
[349157 5338 100]
[349158 5338 100]
[349159 5338 100]]
#SECOND LOOP, FAIL :(
4970 400
[[349135 4970 50]
[349146 4970 50]
[349157 4970 50]
[349178 4970 50]] this is 200, not 400
#LAST LOOP. OK :)
5339 150
[[649146 5339 50]
[749157 5339 50]
[849178 5339 50]]
Tks提前!!!不要打扰伙计们,找到我的答案,我改变了过滤器的逻辑,通过一个负掩模获得b上的元素
mask_b = b[:,2].cumsum() > a[1]
reached = b[~mask_b]
这一变化给了我所有的“假”,cumsum低于a[1]
输出
5338 300 [False False False True True True]
[[349154 5338 100]
[349155 5338 100]
[349156 5338 100]]
4970 400 [False False False False False False False False True True True]
[[349159 4970 50]
[349160 4970 50]
[349179 4970 50]
[349181 4970 50]
[349192 4970 50]
[349113 4970 50]
[349124 4970 50]
[349135 4970 50]]
5339 150 [False False False True True]
[[449124 5339 50]
[549135 5339 50]
[649146 5339 50]]
这不是第一次拆分的前三行吗?因为我们需要300?Divakar,你是对的,我改变了逻辑,如下所示,第二次拆分的第三列不是应该有三个
100s
,对应于B的第4、5、6行,以及第7、8行的两个50s
?