Numpy Cumsum条件在两个阵列之间的循环

时间:2017-05-24 22:10:57

标签: python python-2.7 numpy cumsum

解决,阅读this

需要一些帮助来理解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中的值时停止cumsum,由于某种原因在第二行中 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]]

事先提前!!!

1 个答案:

答案 0 :(得分:0)

不要打扰家伙,找到我的答案,我改变过滤器的逻辑以通过负面罩获得b上的元素。

add_action( 'init', 'rmcc_create_post_type' );
function rmcc_create_post_type() {  // clothes custom post type
// set up labels
$labels = array(
    'name' => 'Products',
    'singular_name' => 'Product',
    'add_new' => 'Add New',
    'add_new_item' => 'Add New Product',
    'edit_item' => 'Edit Product',
    'new_item' => 'New Product',
    'all_items' => 'All Products',
    'view_item' => 'View Product',
    'search_items' => 'Search Product',
    'not_found' =>  'No Product Found',
    'not_found_in_trash' => 'No Product found in Trash',
    'parent_item_colon' => '',
    'menu_name' => 'Products',
);
register_post_type(
    'Products',
    array(
        'labels' => $labels,
        'has_archive' => true,
        'public' => true,
        'hierarchical' => true,
        'supports' => array( 'title', 'editor', 'excerpt', 'custom-fields', 'thumbnail','page-attributes' ),
        'taxonomies' => array( 'post_tag', 'category' ),
        'exclude_from_search' => true,
        'capability_type' => 'post',
    )
);
}

// SHORTCODE

add_shortcode( 'list-posts-basic', 'rmcc_post_listing_shortcode' );
function rmcc_post_listing_shortcode( $atts ) {
ob_start();


// define attributes and their defaults
extract( shortcode_atts( array (
    'category' => '',
), $atts ) );

// define query parameters based on attributes
$options = array(
    'post_type' => 'Products',
    'category_name' => $category,
    'posts_per_page' => -1,
    'order' => 'ASC',
    'orderby' => 'title',
);

$query = new WP_Query( $options );
if ( $query->have_posts() ) { ?>


<div class="gallery">
    <div class="gallery-sortbar" id="portfolio-filter">
    <a href="#all" title="">All</a>
    <?php
    /**Code for get terms*/
    // no default values. using these as examples

    $taxonomy = 'category';
    $category_id = get_term_by('name',$category, $taxonomy);
    $term_id = $category_id->term_id;
    $child_categories = get_term_children( $term_id, $taxonomy );
    for($i=0;$i<count($child_categories);$i++){
            $category_name = get_term( $child_categories[$i], $taxonomy );
            $catreal_name = $category_name->name;
            $catfilterfull = str_replace(' ', '', $catreal_name);
            echo '<a href="#'.$catfilterfull.'" title="'.$catfilter.'">'.$catreal_name.'</a>';
        }

    ?>






    </div>
<div class="gallery-viewer">
<div id="portfolio-wrapper">
<div id="portfolio-list" class="row">

        <?php while ( $query->have_posts() ) : $query->the_post(); ?>
        <div id="post-<?php the_ID(); ?>" class="col-xs-12 col-sm-6 col-md-3 portfolio-item all
        <?php 
            foreach((get_the_category()) as $catname) {  
            if ($catname->category_parent != '') {  
                $catfilter = ( $catname->cat_name != 'local' ) ? $catname->cat_name . '' : '';
                $catfilterfull = str_replace(' ', '', $catfilter);
                echo ' '.$catfilterfull;
            } }

             ?>
        ">
            <a href="<?php the_permalink(); ?>" class="thumbnail">
            <?php the_post_thumbnail( array(250, 250) ); ?>
            <div class="caption"><?php the_title(); ?></div></a>

        </div>
        <?php endwhile;
        wp_reset_postdata(); ?>
         </div>
        <div class="clearboth"></div>
         </div>
    </div>
    </div>
<?php $myvariable = ob_get_clean();
return $myvariable;
}
}

这种变化给了我所有的“假”,cumsum低于[1]。

输出

mask_b = b[:,2].cumsum() > a[1] 
reached = b[~mask_b]