【问题标题】:Picking rows from two NumPy arrays at random从两个 NumPy 数组中随机选择行
【发布时间】:2021-12-14 02:51:42
【问题描述】:

从两个numpy数组开始:

A = np.array([[1, 2], [2, 3], [3, 4], [4, 5]])
B = np.array([[9, 8], [8, 7], [7, 6], [6, 5]])

我想创建一个新数组C,为每个索引从同一索引中选择一行,但从AB 中随机选择。思路是在random_selector的每一个索引处,如果值大于0.1,那么我们从A中选择同索引行,否则从B中选择同索引行。

random_selector = np.random.random(size=len(A))

C = np.where(random_selector > .1, A, B)

# example of desired result picking rows from respectively A, B, B, A:
# [[1, 2], [8, 7], [7, 6], [4, 5]]

但是,运行上述代码会产生以下错误:

ValueError: operands could not be broadcast together with shapes (4,) (4,2) (4,2) 

【问题讨论】:

    标签: python numpy multidimensional-array random


    【解决方案1】:

    尝试添加新维度:

    import numpy as np
    
    A = np.array([[1, 2], [2, 3], [3, 4], [4, 5]])
    B = np.array([[9, 8], [8, 7], [7, 6], [6, 5]])
    
    random_selector = np.random.random(size=len(A))
    
    C = np.where((random_selector > .1)[:, None], A, B)
    print(C)
    

    输出 (单次运行)

    [[1 2]
     [8 7]
     [3 4]
     [4 5]]
    

    【讨论】:

    • 有趣的是它的工作原理。回想起来,这听起来很直观,但我不会想到。
    • 不幸的是,Numpy 中的很多东西都是这样的。
    猜你喜欢
    • 2014-05-15
    • 1970-01-01
    • 2021-12-03
    • 2017-09-16
    • 2018-06-07
    • 1970-01-01
    • 2017-09-16
    相关资源
    最近更新 更多