Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 两个数组之间循环的Numpy累积和条件_Python_Python 2.7_Numpy_Cumsum - Fatal编程技术网

Python 两个数组之间循环的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

解决,读

需要一些帮助来理解numpy中的这种奇怪行为吗

我有两个数组

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