【问题标题】:Numpy replace specific rows and columns of one array with specific rows and columns of another arrayNumpy 用另一个数组的特定行和列替换一个数组的特定行和列
【发布时间】:2018-11-19 09:27:01
【问题描述】:

我正在尝试替换 Numpy 数组的特定行和列,如下所示。

数组a和b的初始值如下:

a = [[1 1 1 1]
     [1 1 1 1]
     [1 1 1 1]]

b = [[2 3 4 5]
     [6 7 8 9]
     [0 2 3 4]]

现在,基于一定的概率,我需要将a 的值替换为b 的值(例如,在生成随机数r 后,每个元素的值介于0 和1 之间,我如果 r > 0.8),将用 b 的元素替换 a 的元素。

如何使用 numpy/scipy 在 Python 中实现高性能?

【问题讨论】:

    标签: python arrays numpy indexing scipy


    【解决方案1】:

    带有屏蔽。我们首先生成一个具有相同维度的随机数矩阵,并检查它们是否大于0.8

    mask = np.random.random(a.shape) > 0.8
    

    现在我们可以将b 的值(其中maskTrue)分配给a 的相应索引:

    a[mask] = b[mask]
    

    例如:

    >>> a
    array([[1., 1., 1., 1.],
           [1., 1., 1., 1.],
           [1., 1., 1., 1.]])
    >>> b
    array([[2, 3, 4, 5],
           [6, 7, 8, 9],
           [0, 2, 3, 4]])
    >>> mask = np.random.random(a.shape) > 0.8
    >>> mask
    array([[ True, False, False, False],
           [ True, False, False, False],
           [False, False, False, False]])
    >>> a[mask] = b[mask]
    >>> a
    array([[2., 1., 1., 1.],
           [6., 1., 1., 1.],
           [1., 1., 1., 1.]])
    

    所以这里maskTrue(由于0.8 相当高,我们预计平均有2.4 个这样的值),我们分配b 的对应值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2014-05-20
      • 2022-11-17
      相关资源
      最近更新 更多