【问题标题】:subtracting every nth array with every nth array用每个第 n 个数组减去每个第 n 个数组
【发布时间】:2021-10-12 08:14:51
【问题描述】:

我有一个形状为 (10000,6) 的数组。例如:

a = np.array([[5, 5, 5, 5, 5, 5][10, 10, 10, 10, 10][15, 15, 15, 15, 15]...])

我想取每 25 个数组并从接下来的 25 个元素中减去它的元素值,直到选中一个新的减法数组。例如,如果第一个数组是:

[10, 10, 10, 10, 10]

然后应该在数组本身和接下来的 25 个数组上减去这些值,直到选择一个像这样的新减法数组:

[2, 2, 2, 2, 2]

然后应该减去数组本身和以下 25 个元素的数组值。 这意味着在操作后每 25 个数组将是:

[0, 0, 0, 0, 0]

因为它已经被自己减去了。

【问题讨论】:

    标签: arrays numpy subtraction


    【解决方案1】:

    我会这样做:

    将 numpy 导入为 np

    arr = np.random.randint(0, 10, (9, 3))
    group_size = 3
    # select vectors you want ot subtract and copy them {group_size} times
    selected = arr[::group_size].repeat(3, axis = 0)
    # subtract selected vectors from all vectors in the group
    sub_arr = arr-selected
    

    输出:

    arr = 
    [[9 6 3]
     [8 3 3]
     [2 0 4]
     [0 3 9]
     [3 9 9]
     [0 8 6]
     [4 0 0]
     [6 1 9]
     [2 6 4]]
    selected = 
    [[9 6 3]
     [9 6 3]
     [9 6 3]
     [0 3 9]
     [0 3 9]
     [0 3 9]
     [4 0 0]
     [4 0 0]
     [4 0 0]]
    sub_arr = 
    [[ 0  0  0]
     [-1 -3  0]
     [-7 -6  1]
     [ 0  0  0]
     [ 3  6  0]
     [ 0  5 -3]
     [ 0  0  0]
     [ 2  1  9]
     [-2  6  4]]
    

    【讨论】:

      【解决方案2】:

      你可以重塑你的数组,让每个块都有正确的行数,然后简单地减去第一行

      import numpy as np
      
      a = np.arange(10000)[:, None] * np.ones(6)
      a = a.reshape(-1, 25, 6)
      a -= a[:, 0, :][:, None, :]
      a = a.reshape(-1, 6)
      

      【讨论】:

        猜你喜欢
        • 2018-11-15
        • 2021-10-05
        • 1970-01-01
        • 2020-07-21
        • 2017-04-17
        • 2015-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多