如何在矩阵中生成所有可能的 k 大小向量(包括对角线)?

人工智能教授

鉴于这个矩阵:

x = [[1,2,3,4,5], [1,2,3,4,5], [1,2,3,4,5], [1,2,3,4,5], [1,2,3,4,5], [1,2,3,4,5]]

返回此矩阵中所有可能的 4 x 1 向量和 1 x 4 矩阵的有效方法是什么?以及连接在一条线上的任何 4 个对角线空间。

例如:[1,1,1,1]会出现 3 次

对角线也需要处理,因此[1,2,3,4]将包括为一行,但也是对角线。

安德鲁·艾伦

把问题分成两步:

第 1 步 - 获取所有水平、垂直和对角线

对角线是使用以下事实处理的i+j,或者分别i-j是,对于索引来说是常数i, j

x = [[1,2,3,4,5], [1,2,3,4,5], [1,2,3,4,5], [1,2,3,4,5], [1,2,3,4,5], [1,2,3,4,5]]

pprint.pprint(x)

# [[1, 2, 3, 4, 5],
# [1, 2, 3, 4, 5],
# [1, 2, 3, 4, 5],
# [1, 2, 3, 4, 5],
# [1, 2, 3, 4, 5],
# [1, 2, 3, 4, 5]]

all_lines = (
    # Horizontal
    [x[i] for i in range(len(x))] +
    # Vertical
    [[x[i][j] for i in range(len(x))] for j in range(len(x[0]))] +
    # Diagonal k = i - j
    [[x[k+j][j] for j in range(len(x[0])) if 0 <= k+j < len(x)] for k in range(-len(x[0])+1, len(x))] +
    # Diagonal k = i + j
    [[x[k-j][j] for j in range(len(x[0])) if 0 <= k-j < len(x)] for k in range(len(x[0])+len(x)-1)]
)
>>> pprint.pprint(all_lines)
[[1, 2, 3, 4, 5],
 [1, 2, 3, 4, 5],
 [1, 2, 3, 4, 5],
 [1, 2, 3, 4, 5],
 [1, 2, 3, 4, 5],
 [1, 2, 3, 4, 5],
 [1, 1, 1, 1, 1, 1],
 [2, 2, 2, 2, 2, 2],
 [3, 3, 3, 3, 3, 3],
 [4, 4, 4, 4, 4, 4],
 [5, 5, 5, 5, 5, 5],
 [5],
 [4, 5],
 [3, 4, 5],
 [2, 3, 4, 5],
 [1, 2, 3, 4, 5],
 [1, 2, 3, 4, 5],
 [1, 2, 3, 4],
 [1, 2, 3],
 [1, 2],
 [1],
 [1],
 [1, 2],
 [1, 2, 3],
 [1, 2, 3, 4],
 [1, 2, 3, 4, 5],
 [1, 2, 3, 4, 5],
 [2, 3, 4, 5],
 [3, 4, 5],
 [4, 5],
 [5]]

第 2 步 - 对于每行选择每个 4 长度的切片

ans = [a[i:i+4] for i in range(len(a)-4+1) for a in all_lines if len(a[i:i+4]) == 4]
>>> ans = [a[i:i+4] for i in range(len(a)-4+1) for a in all_lines if len(a[i:i+4]) == 4]
>>> pprint.pprint(ans)
[[1, 2, 3, 4],
 [1, 2, 3, 4],
 [1, 2, 3, 4],
 [1, 2, 3, 4],
 [1, 2, 3, 4],
 [1, 2, 3, 4],
 [1, 1, 1, 1],
 [2, 2, 2, 2],
 [3, 3, 3, 3],
 [4, 4, 4, 4],
 [5, 5, 5, 5],
 [2, 3, 4, 5],
 [1, 2, 3, 4],
 [1, 2, 3, 4],
 [1, 2, 3, 4],
 [1, 2, 3, 4],
 [1, 2, 3, 4],
 [1, 2, 3, 4],
 [2, 3, 4, 5],
 [2, 3, 4, 5],
 [2, 3, 4, 5],
 [2, 3, 4, 5],
 [2, 3, 4, 5],
 [2, 3, 4, 5],
 [2, 3, 4, 5],
 [1, 1, 1, 1],
 [2, 2, 2, 2],
 [3, 3, 3, 3],
 [4, 4, 4, 4],
 [5, 5, 5, 5],
 [2, 3, 4, 5],
 [2, 3, 4, 5],
 [2, 3, 4, 5],
 [2, 3, 4, 5],
 [1, 1, 1, 1],
 [2, 2, 2, 2],
 [3, 3, 3, 3],
 [4, 4, 4, 4],
 [5, 5, 5, 5]]

也许不是最有效的,但它至少是一种方法。可能会有一种使用 itertools 的方法combinations来显着简化这一过程。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用RcppArmadillo用向量填充上三角矩阵(包括对角线)

来自分类Dev

如何在Matlab中沿对角线重复向量

来自分类Dev

更改矩阵中心对角线旁边的对角线

来自分类Dev

如何将向量中对角线的值插入R中的矩阵?

来自分类Dev

使用向量值将新行添加到R中的矩阵对角线

来自分类Dev

查找矩阵大对角线以下的所有元素

来自分类Dev

Matlab:具有非平方向量的块对角线

来自分类Dev

如何删除上三角中数据框的所有值,包括熊猫中的对角线值?

来自分类Dev

Tensorflow:使用对角线/超对角线创建输入的对角矩阵

来自分类Dev

修改特征矩阵对角线

来自分类Dev

矩阵的对角线绑定

来自分类Dev

创建矩阵的非对角线元素

来自分类Dev

本征-排序矩阵对角线

来自分类Dev

“”“对角线”“” -1 / + 1矩阵

来自分类Dev

矩阵对角线的均值计算+增量

来自分类Dev

矩阵的对角线总和

来自分类Dev

Matlab递减矩阵对角线

来自分类Dev

从矩阵中提取块对角线

来自分类Dev

矩阵C ++对角线元素的总和

来自分类Dev

矩阵的对角线绑定

来自分类Dev

矩阵中的对角线-Python

来自分类Dev

创建矩阵的非对角线元素

来自分类Dev

“”“对角线”“” -1 / + 1矩阵

来自分类Dev

矩阵对角线的均值计算+增量

来自分类Dev

从矩阵中提取块对角线

来自分类Dev

填充矩阵的对角线

来自分类Dev

R对功能-如何更改对角线值的字体大小?

来自分类Dev

粘贴n * n矩阵或数据帧的所有可能对角线

来自分类Dev

如何使对角线和反向对角线与2D矩阵中的点交叉?