反转2d数组中的某些元素以生成指定格式的矩阵Python 3

用户名

我有以下代码用于列表列表,目的是创建数字矩阵:

grid=[[1,2,3,4,5,6,7],[8,9,10,11,12],[13,14,15,16,17],[18,19,20,21,22]]

在使用我发现的以下代码会颠倒列表时,它会产生一个矩阵...

for i in reversed(grid):
    print(i)

输出为:

[18, 19, 20, 21, 22]
[13, 14, 15, 16, 17]
[8, 9, 10, 11, 12]
[1, 2, 3, 4, 5, 6, 7]

但是,我希望输出如下,以便数字在上升时“连接”:

[22,21,20,19,18]
[13,14,15,16,17]
[12,11,10,9,8]
[1,2,3,4,5,6,7]

另外,对于投票,我首先要对更有效的生成矩阵的方式感兴趣。例如,要生成7x7数组-是否可以使用变量(例如7或49)来完成?或者对于10x10矩阵,是10还是100?

更新:是的,很抱歉-子列表的大小都应相同。上面的错字

根据下面的答案进行更新

这两行:

>>> grid=[[1,2,3,4,5,6,7],[8,9,10,11,12],[13,14,15,16,17],[18,18,20,21,22]]
>>> [lst[::-1] for lst in grid[::-1]]

产生以下输出:

[[22, 21, 20, 18, 18], [17, 16, 15, 14, 13], [12, 11, 10, 9, 8], [7, 6, 5,  4, 3, 2, 1]]

但是我希望他们在一行之后再打印一行,就像矩阵..也一样,这样我就可以检查输出是否符合我的指定。从本质上来说,这就是我所需要的,答案才能成为答案!

f5r5e5d

通常创建2D矩阵,并使用numpy对其进行处理

然后索引切片可以对行,列进行重新排序

import numpy as np

def SnakeMatrx(n):
    Sq, Sq.shape = np.arange(n * n), (n, n) # Sq matrix filled with a range
    Sq[1::2,:] = Sq[1::2,::-1] # reverse odd row's columns
    return Sq[::-1,:] + 1    # reverse order of rows, add 1 to every entry

SnakeMatrx(5)
Out[33]: 
array([[21, 22, 23, 24, 25],
       [20, 19, 18, 17, 16],
       [11, 12, 13, 14, 15],
       [10,  9,  8,  7,  6],
       [ 1,  2,  3,  4,  5]])

SnakeMatrx(4)
Out[34]: 
array([[16, 15, 14, 13],
       [ 9, 10, 11, 12],
       [ 8,  7,  6,  5],
       [ 1,  2,  3,  4]])

如果您真的想要一个列表列表:

SnakeMatrx(4).tolist()
Out[39]: [[16, 15, 14, 13], [9, 10, 11, 12], [8, 7, 6, 5], [1, 2, 3, 4]]

numpy很流行,但不是Python发行版中的官方标准库

当然可以通过列表操作来完成

def SnakeLoL(n):
    Sq = [[1 + i + n * j for i in range(n)] for j in range(n)] # Sq LoL filled with a range
    for row in Sq[1::2]:
        row.reverse()     # reverse odd row's columns
    return Sq[::-1][:]    # reverse order of rows
# or maybe more Pythonic for return Sq[::-1][:]
#     Sq.reverse()   # reverse order of rows 
#     return Sq 

SnakeLoL(4)
Out[91]: [[16, 15, 14, 13], [9, 10, 11, 12], [8, 7, 6, 5], [1, 2, 3, 4]]

SnakeLoL(5)
Out[92]: 
[[21, 22, 23, 24, 25],
 [20, 19, 18, 17, 16],
 [11, 12, 13, 14, 15],
 [10, 9, 8, 7, 6],
 [1, 2, 3, 4, 5]]

print(*SnakeLoL(4), sep='\n')
[16, 15, 14, 13]
[9, 10, 11, 12]
[8, 7, 6, 5]
[1, 2, 3, 4]

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

重新排列numpy数组中的元素以在2d中绘制3d数组,并保留分组

如何使用python 3中的列表中的元素打印3x3 2D数组?

在2D数组中查找最高元素的列表:Python 3

2D数组和3D数组中每个向量之间的Numpy矩阵乘法

2D稀疏矩阵乘以3D数组

仅基于一个数字在python 3中创建2d数组/列表以创建空白矩阵

将具有特定格式的 2-D 矩阵重塑为 3-D 矩阵 (MATLAB)

如何使用python从1d数组中创建具有3个元素的2d数组

如何在Matlab中将2D矩阵序列存储到3D数组中?

如何用2D矩阵中指定的随机数填充零3D数组?

3D矩阵中的2D布尔选择

我应该如何用numpy将3d数组中的1d数组乘以2d矩阵

从 2D 矩阵生成器创建 3D 矩阵

MATLAB:将 2D 矩阵与元胞数组内的 3D 矩阵相乘

检查2d数组在Python中的3d数组中是否存在?

在3D数组中查找2D数组

如何将2D numpy数组与3D数组矩阵相乘以得到3D数组?

有没有办法将3d数组的2d矩阵乘以R中的标量?

在Python中从现有2D数组创建3D数组

Python:从 3d numpy 数组中的 2d 数组访问保存的点

从python中的3D数组切片创建新的2D数组?

使用第二个矩阵将3D数组展平为2D数组以选择三维尺寸的元素

如何在MATLAb中的2D矩阵的n,m位置构建1x3向量的嵌套数组?

使用 2D 数组中的元素(不包括第一个)创建 3D 数组

将numpy 2D数组中的字符串元素转换为array并产生3D数组

将3D矩阵与2D矩阵相乘

3D矩阵乘以2D矩阵

如何在python中将图像的尺寸从3D矩阵更改为2D矩阵?

从2D矩阵中基于3D矩阵的位置获取值