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

创建一个数组,其中每个元素都存储其索引

单于钊
2023-03-14
问题内容

我想创建一个2d numpy数组,其中每个元素都是其索引的元组。

范例(4x5):

array([[[0, 0],
        [0, 1],
        [0, 2],
        [0, 3],
        [0, 4]],

       [[1, 0],
        [1, 1],
        [1, 2],
        [1, 3],
        [1, 4]],

       [[2, 0],
        [2, 1],
        [2, 2],
        [2, 3],
        [2, 4]],

       [[3, 0],
        [3, 1],
        [3, 2],
        [3, 3],
        [3, 4]]])

我将创建list具有以下列表理解的python :

[[(y,x) for x in range(width)] for y in range(height)]

是否有更快的方法可以达到相同的效果,也许使用numpy方法?


问题答案:

这是一个基于初始化的方法-

def create_grid(m,n):
    out = np.empty((m,n,2),dtype=int) #Improvement suggested by @AndrasDeak
    out[...,0] = np.arange(m)[:,None]
    out[...,1] = np.arange(n)
    return out

样品运行-

In [47]: create_grid(4,5)
Out[47]: 
array([[[0, 0],
        [0, 1],
        [0, 2],
        [0, 3],
        [0, 4]],

       [[1, 0],
        [1, 1],
        [1, 2],
        [1, 3],
        [1, 4]],

       [[2, 0],
        [2, 1],
        [2, 2],
        [2, 3],
        [2, 4]],

       [[3, 0],
        [3, 1],
        [3, 2],
        [3, 3],
        [3, 4]]])

到目前为止针对(4,5)网格化和更大尺寸发布的所有方法的运行时测试-

In [111]: %timeit np.moveaxis(np.indices((4,5)), 0, -1)
     ...: %timeit np.mgrid[:4, :5].swapaxes(2, 0).swapaxes(0, 1)
     ...: %timeit np.mgrid[:4,:5].transpose(1,2,0)
     ...: %timeit create_grid(4,5)
     ...: 
100000 loops, best of 3: 11.1 µs per loop
100000 loops, best of 3: 17.1 µs per loop
100000 loops, best of 3: 17 µs per loop
100000 loops, best of 3: 2.51 µs per loop

In [113]: %timeit np.moveaxis(np.indices((400,500)), 0, -1)
     ...: %timeit np.mgrid[:400, :500].swapaxes(2, 0).swapaxes(0, 1)
     ...: %timeit np.mgrid[:400,:500].transpose(1,2,0)
     ...: %timeit create_grid(400,500)
     ...: 
1000 loops, best of 3: 351 µs per loop
1000 loops, best of 3: 1.01 ms per loop
1000 loops, best of 3: 1.03 ms per loop
10000 loops, best of 3: 190 µs per loop


 类似资料:
  • 问题内容: 我正在尝试创建一个表格,其中每一行都是一个表格。我希望每个输入都在不同的表分区中,但是例如,我仍然需要所有所有第一个输入都属于同一个表头,依此类推。 我想做的是一个可编辑的网格 ,或多或少这样: 但是显然我不能以这种方式排列标签(或者w3c验证程序所说的也是如此)。 有什么好办法吗? 问题答案: 如果你想要一个“编辑网格”,即像结构的表格,可以让你做任何行的形式,使用CSS,模仿表标签

  • 本文向大家介绍一个数组,除一个元素外其它都是两两相等,求那个元素?相关面试题,主要包含被问及一个数组,除一个元素外其它都是两两相等,求那个元素?时的应答技巧和注意事项,需要的朋友参考一下 考察点:数组    

  • 问题内容: 我想创建一个包含ArrayList 元素的数组。 我试过了 但这似乎不起作用。 问题答案: 您不能创建通用类型的数组。 相反,您可以创建一个。

  • 创建一组元素,根据原始数组中的位置进行分组。 使用 Math.max.apply() 获取参数中最长的数组。 创建一个长度为返回值的数组,并使用 Array.from() 和 map-function 来创建一个分组元素数组。 如果参数数组的长度不同,则在未找到值的情况下使用 undefined 。 const zip = (...arrays) => { const maxLength =

  • 问题内容: 给定一个数组: 并给出其索引: 如何将它们整齐地堆叠在一起以形成新的2D​​阵列?这就是我想要的: 这是我目前的解决方案: 它可以工作,但是执行此操作是否更短/更优雅? 问题答案: 在随后的步骤中使用然后分配索引和数组值- 请注意,我们避免使用,这可能会减慢速度。 样品运行- 性能 注意: 时间包括转换到数据帧,这是该解决方案的最终用例。

  • 问题内容: 我有两个一维数组x和y,一个比另一个小。我试图找到x中y的每个元素的索引。 我发现有两种简单的方法可以做到这一点,第一种很慢,第二种需要占用大量内存。 记忆猪 是否有更快的方法或更少的内存密集型方法?理想情况下,搜索将利用以下事实:我们不是在列表中搜索一件事,而是在搜索许多东西,因此稍微适合并行化。如果您不假设y的每个元素实际上都在x中,则可获得加分。 问题答案: 正如Joe King