【问题标题】:How would you split a numpy array where the elements give the partition size?你将如何分割一个元素给出分区大小的numpy数组?
【发布时间】:2021-03-08 19:29:08
【问题描述】:

对于一个 numpy 一维数组,例如:

In [1]: A = np.array([2,5,1,3,9,0,7,4,1,2,0,11])
In [2]: A
Out[2]: array([2,5,1,3,9,0,7,4,1,2,0,11])

我需要使用值作为子数组长度来拆分数组。

对于示例数组:

  1. 第一个索引的值为 2,因此我需要在索引 0 + 2 处进行第一次拆分,这样会导致 ([2,5,1])。
  2. 跳到索引 3(因为索引 0-2 在第 1 步中被吞噬了)。
  3. 索引 3 = 3 处的值,因此第二次拆分将发生在索引 3 + 3 处,结果为 ([3,9,0,7])。
  4. 跳至索引 7
  5. 索引 7 = 4 处的值,因此第三次也是最后一次拆分将发生在索引 7 + 4 处,结果为 ([4,1,2,0,11])

我使用这个简单的数组作为示例,因为我认为它在我的实际用例中会有所帮助,即从二进制文件中读取数据(作为字节或无符号短裤)。我猜 numpy 将是最快的方法,但我也可以使用 struct/bytearray/lists 或任何最好的方法。

我希望这是有道理的。我很难弄清楚如何最好地表达这个问题。

【问题讨论】:

    标签: arrays numpy split


    【解决方案1】:

    这是一种使用标准 python 列表和 while 循环的方法:

    def custom_partition(arr):
        partitions = []
        i = 0
        while i < len(arr):
            pariton_size = arr[i]
            next_i = i + pariton_size + 1
            partitions.append(arr[i:next_i])
            i = next_i
        return partitions
    
    a = [2, 5, 1, 3, 9, 0, 7, 4, 1, 2, 0, 11]
    b = custom_partition(a)
    print(b)
    

    输出:

    [[2, 5, 1], [3, 9, 0, 7], [4, 1, 2, 0, 11]]
    

    【讨论】:

    • 谢谢@ShashSinha,这与我所拥有的很接近,但对于大文件来说真的很慢。
    • 啊,好吧,因为内部列表是动态调整大小的,所以不知道该怎么做。
    猜你喜欢
    • 2021-06-10
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    相关资源
    最近更新 更多