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

Python:对齐NumPy数组

漆雕彬彬
2023-03-14
问题内容

请我有点Python陌生,感觉很好,我可以说python很性感,直到我需要移动4x4矩阵的内容,我想在构建游戏的2048游戏演示时使用它,在这里,我有这个功能

def cover_left(matrix):
        new=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
        for i in range(4):
             count=0
             for j in range(4):
                if mat[i][j]!=0:
                    new[i][count]=mat[i][j]
                    count+=1
        return new

如果你这样调用它,这就是函数的作用

cover_left([
              [1,0,2,0], 
              [3,0,4,0], 
              [5,0,6,0], 
              [0,7,0,8]
          ])

它将覆盖左侧的零并产生

[  [1, 2, 0, 0],
   [3, 4, 0, 0],
   [5, 6, 0, 0],
   [7, 8, 0, 0]]

请让我帮助某人,以numpy达到更快的速度并且需要更少的代码(我在深度优先搜索算法中使用的代码),更重要的是cover_up,cover_down和

`cover_left`.
`cover_up`
    [  [1, 7, 2, 8],
       [3, 0, 4, 0],
       [5, 0, 6, 0],
       [0, 0, 0, 0]]
`cover_down`
    [  [0, 0, 0, 0],
       [1, 0, 2, 0],
       [3, 0, 4, 0],
       [5, 7, 6, 8]]
`cover_right`
    [  [0, 0, 1, 2],
       [0, 0, 3, 4],
       [0, 0, 5, 6],
       [0, 0, 7, 8]]

问题答案:

这里有一个量化的方法,通过启发this other post和推广到覆盖non-zeros所有四个方向-

def justify(a, invalid_val=0, axis=1, side='left'):    
    """
    Justifies a 2D array

    Parameters
    ----------
    A : ndarray
        Input array to be justified
    axis : int
        Axis along which justification is to be made
    side : str
        Direction of justification. It could be 'left', 'right', 'up', 'down'
        It should be 'left' or 'right' for axis=1 and 'up' or 'down' for axis=0.

    """

    if invalid_val is np.nan:
        mask = ~np.isnan(a)
    else:
        mask = a!=invalid_val
    justified_mask = np.sort(mask,axis=axis)
    if (side=='up') | (side=='left'):
        justified_mask = np.flip(justified_mask,axis=axis)
    out = np.full(a.shape, invalid_val) 
    if axis==1:
        out[justified_mask] = a[mask]
    else:
        out.T[justified_mask.T] = a.T[mask.T]
    return out

样品运行

In [473]: a # input array
Out[473]: 
array([[1, 0, 2, 0],
       [3, 0, 4, 0],
       [5, 0, 6, 0],
       [6, 7, 0, 8]])

In [474]: justify(a, axis=0, side='up')
Out[474]: 
array([[1, 7, 2, 8],
       [3, 0, 4, 0],
       [5, 0, 6, 0],
       [6, 0, 0, 0]])

In [475]: justify(a, axis=0, side='down')
Out[475]: 
array([[1, 0, 0, 0],
       [3, 0, 2, 0],
       [5, 0, 4, 0],
       [6, 7, 6, 8]])

In [476]: justify(a, axis=1, side='left')
Out[476]: 
array([[1, 2, 0, 0],
       [3, 4, 0, 0],
       [5, 6, 0, 0],
       [6, 7, 8, 0]])

In [477]: justify(a, axis=1, side='right')
Out[477]: 
array([[0, 0, 1, 2],
       [0, 0, 3, 4],
       [0, 0, 5, 6],
       [0, 6, 7, 8]])


 类似资料:
  • 问题内容: 我在创建numpy数组的numpy数组时遇到问题。我将在一个循环中创建它: 所需结果: 实际结果: 可能吗?我不知道数组的最终尺寸,因此无法使用固定尺寸对其进行初始化。 问题答案: 永远不要在循环中追加数组:与基本的Python相比,这是NumPy非常不擅长的一项操作。这是因为您要对每个数据进行完整复制,这将花费您二次时间。 相反,只需将您的数组附加到Python列表中,并在最后进行转

  • 问题内容: 如何按第n列对NumPy中的数组排序? 例如, 我想按第二列对行进行排序,以便返回: 问题答案: 对于“正确”的方式,请参见的关键字参数。 但是,你需要将数组视为具有字段的数组(结构化数组)。 如果你最初没有使用字段定义数组,那么“正确”的方法将非常丑陋。 作为一个简单的示例,对其进行排序并返回副本: 对其进行原位排序: 据我所知,确实是最优雅的方式… 此方法的唯一优点是,参数是用于排

  • 本文向大家介绍对齐相关面试题,主要包含被问及对齐时的应答技巧和注意事项,需要的朋友参考一下 语音有很多帧向量,向量与模型的每个状态之间建立对应关系 对齐关系 理解为观测序列Y GMM:给定状态下,特征的概率 DNN:给定输入下,知道属于哪个特征(多类判决问题)状态的概率分布。

  • align(resource $resourchHandle, Format::const ...$style): \Vtiful\Kernel\Format 示例 $format = new \Vtiful\Kernel\Format($fileHandle); $alignStyle = $format ->align(Format::FORMAT_ALIGN_CENTER,

  • 问题内容: 我对python和numpy很陌生。请问有人可以帮助我了解如何对用作索引的某些数组进行索引。我有以下六个2D阵列- 我想将这些数组用作索引,并将值10放入新的空矩阵的相应索引中。输出应如下所示: 到目前为止,我已经尝试过 但这给了我错误的输出。任何帮助请。 问题答案: 工作原理: 如果您在工作分配中使用 两个 numpy数组建立索引, 然后认为NumPy的作为过的各元件同时移动和中的每

  • NumPy是一个Python包,代表'Numerical Python'。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。 使用NumPy的操作 使用NumPy,开发人员可以执行以下操作 - 数组的数学和逻辑运算。 用于形状操纵的傅里叶变换和例程。 与线性代数有关的操作。 NumPy具有线性代数和随机数生成的内置函数。 NumPy - MatLab的替代品 NumPy经常与SciPy (