python3.x获取矩阵上的奇数列

2024-04-25 09:46:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python3.7,我想得到矩阵的所有奇数列。你知道吗

举个例子,我现在有一个这种风格的4x4矩阵。你知道吗

[[0, 9, 1, 6], [0, 3, 1, 5], [0, 2, 1, 7], [0, 6, 1, 2]]

那是。。。你知道吗

0 9 1 6
0 3 1 5
0 2 1 7
0 6 1 2

我想得到:

9 6
3 5
2 7
6 2

矩阵的数目和大小会改变,但结构总是会改变

[[0, (int), 1, (int), 2...], [0, (int), 1, (int), 2 ...], [0, (int), 1, (int), 2...], [0, (int), 1, (int), 2...], ...]

为了得到行,我可以做[:: 2],但是这个奇妙的解决方案现在对我不起作用。我尝试通过以下方式访问矩阵:

for i in matrix:
    for j in matrix:

但这些都不管用。 我该怎么解决?你知道吗

谢谢你。你知道吗


Tags: infor风格方式矩阵解决方案结构matrix
2条回答

不使用numpy,您可以在列表理解中使用类似于索引方案([1::2])的内容:

>>> [i[1::2] for i in mat]
[[9, 6], [3, 5], [2, 7], [6, 2]]

使用numpy,可以执行类似的操作:

>>> import numpy as np
>>> np.array(mat)[:,1::2]
array([[9, 6],
       [3, 5],
       [2, 7],
       [6, 2]])

如果出于任何原因无法使用NumPy,请编写一个自定义实现:

def getColumns(matrix, columns):
    return {c: [matrix[r][c] for r in range(len(matrix))] for c in columns}

它接受一个二维数组和列列表,并返回一个字典,其中列索引是键,实际列是值。注意,如果你通过了所有的索引,你会得到一个转置矩阵。 就你而言

M = [[0, 9, 1, 6],
    [0, 3, 1, 5],
    [0, 2, 1, 7], 
    [0, 6, 1, 2]]

所有奇数列都是偶数索引(因为第一列的索引是0),因此:

L = list(range(0, len(M[0]), 2))

然后你会做:

myColumns = getColumns(M, L)
print(list(myColumns.values()))
#result: [[0, 0, 0, 0], [1, 1, 1, 1]]

但是由于您将值显示为行:

def f(matrix, columns):
    return [[matrix[row][i] for i in columns] for row in range(len(matrix))]
print(f(M, L))
#result: [[0, 1], [0, 1], [0, 1], [0, 1]]

我相信后者正是你想要的。你知道吗

相关问题 更多 >