当前位置: 首页 > 面试题库 >

如何将numpy数组拆分为固定大小的块(有无重叠)?

微生信鸿
2023-03-14
问题内容

可以说我有一个数组:

>>> arr = np.array(range(9)).reshape(3, 3)
>>> arr
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

我想创建一个f(arr, shape=(2, 2))接受数组和形状的函数,然后将数组拆分为给定形状的块 而无需
填充。因此,如有必要,通过重叠某些部分。例如:

>>> f(arr, shape=(2, 2))
array([[[[0, 1],
         [3, 4]],

        [[1, 2],
         [4, 5]]],

       [[[3, 4],
         [6, 7]],

        [[4, 5],
         [7, 8]]]])

我设法创建了以上输出np.lib.stride_tricks.as_strided(arr, shape=(2, 2, 2, 2), strides=(24, 8, 24, 8))。但是我不知道如何将其推广到所有数组和所有块大小。

优选地,对于3D阵列。

如果没有必要重叠,则应避免重叠。另一个例子:

>>> arr = np.array(range(16).reshape(4,4)
>>> arr
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
>>> f(arr, shape=(2,2))
array([[[[0, 1],
         [4, 5]],

        [[2, 3],
         [6, 7]]],

       [[[8, 9],
         [12, 13]],

        [[10, 11],
         [14, 15]]]])

skimage.util.view_as_blocks 接近,但要求数组和块形状兼容。


问题答案:

在scikit-image中view_as_windows有一个内置的功能可以做到这一点-

from skimage.util.shape import view_as_windows

view_as_windows(arr, (2,2))

样品运行-

In [40]: arr
Out[40]: 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

In [41]: view_as_windows(arr, (2,2))
Out[41]: 
array([[[[0, 1],
         [3, 4]],

        [[1, 2],
         [4, 5]]],


       [[[3, 4],
         [6, 7]],

        [[4, 5],
         [7, 8]]]])

对于第二部分,请使用其同一个家族/模块的表亲view_as_blocks-

from skimage.util.shape import view_as_blocks

view_as_blocks(arr, (2,2))


 类似资料:
  • 我想在JavaScript中使用空格作为分隔符将字符串分成固定大小的块(例如每个140个字符)(即它不应该分词),注意:它应该处理换行符目前我使用的是wordwrap npm包,但它不处理新行符。 它适用于普通文本,但如果文本包含新行标记,我会得到以下错误: syntaxerror:exports.runinthiscontext(VM.js:73:16) 在module._compile(mod

  • 问题内容: 我想按给定大小的块分割字符串 范例: 字符串和输出应为 问题答案: 您可以每隔n个元素对集合元素(在本例中为Characters)进行分组,如下所示: 编辑/更新 : 如果要将超出的字符追加到最后一组:

  • 问题内容: 当每个块的总和大致相等时,如何将数组分成两个块? 问题答案: 像这样: 测试:

  • 本文向大家介绍将一个数组按照固定大小进行拆分成数组的方法,包括了将一个数组按照固定大小进行拆分成数组的方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇将一个数组按照固定大小进行拆分成数组的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 问题内容: 假设我有一个如下所示的Javascript数组: 什么方法适合将数组分块(拆分)为更小的数组,最多可以有10个元素? 问题答案: 该array.slice方法可以从一开始,中间,或自己需要的任何目的数组的结束提取切片,在不改变原来的数组。

  • 我想把大的xml分成小块。我正在使用VTDGen将xml文件分割成小块,它可以很好地适应文件大小 代码可以很好地使用VTDGen,但当我使用vtdgenhug时,它就不工作了。 我在“byte[]xml=vn.getXML().getBytes();”处得到空值当您执行syso vn时。getXML()获取对象值。但使用“getBytes()”返回null。我不知道为什么。但如果u do“byte