【问题标题】:Possible to vectorize this array operation in python?可以在 python 中对这个数组操作进行矢量化吗?
【发布时间】:2017-02-23 09:08:50
【问题描述】:

这里是 Python 的初学者,我很难集中精力对我的“for”循环进行矢量化处理。 我有一个 2D numpy 数组,仅包含两个值 -1 和 1。对于每一列和每一行,我想做以下操作:将第一次遇到 1 之前遇到的所有 -1 值设置为 0。 这可以矢量化吗?即使在行/列中没有 1 并且因此将整行/列设置为 0 时也不会崩溃?

【问题讨论】:

  • 你能提供一些示例输入和输出吗?

标签: python numpy vectorization


【解决方案1】:

这是一种矢量化方法 -

mask = a==1
a[~np.maximum.accumulate(mask,axis=0)] = 0
a[~np.maximum.accumulate(mask,axis=1)] = 0

示例运行 -

In [39]: a
Out[39]: 
array([[ 1, -1,  1, -1, -1],
       [ 1,  1, -1,  1, -1],
       [-1,  1, -1,  1, -1],
       [ 1, -1, -1, -1, -1]])

In [40]: mask = a==1

In [41]: a[~np.maximum.accumulate(mask,axis=0)] = 0

In [42]: a[~np.maximum.accumulate(mask,axis=1)] = 0

In [43]: a
Out[43]: 
array([[ 1,  0,  1,  0,  0],
       [ 1,  1, -1,  1,  0],
       [ 0,  1, -1,  1,  0],
       [ 1, -1, -1, -1,  0]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多