python矩阵列表

92vpleto  于 2021-09-08  发布在  Java
关注(0)|答案(3)|浏览(341)

我是python新手,需要一些帮助。我试图找到一个类似的问题,但显然,他们有点不同,答案对我的问题不起作用。我使用pycharm和python 3.8。
切题:我有一个矩阵列表,我想平均所有矩阵值。我已经在努力获取这些价值观了。小测试列表如下所示:

data = [[[1, 2, 3], [1, 2, 3], [1, 2, 3]],
            [[2, 3, 4], [2, 3, 4], [2, 3, 4]],
            [[3, 4, 5], [3, 4, 5], [3, 4, 5]],
            [[4, 5, 6], [4, 5, 6], [4, 5, 6]]]

我试图访问位置上的所有值 (n, m) 在列表中,并期望 (1,1) [2,3,4,5] 我尝试使用:

print(data[:][1][1])

结果是: [2, 3, 4] 这是一个列表条目短。而且,我认为这只是 data[1][1] . 这不是我想要的。有人能告诉我我做错了什么吗?

vi4fp9gy

vi4fp9gy1#

我建议使用 numpy 包,这是伟大的做各种矩阵和向量运算。它使索引更容易。
请注意,我在数据数组中添加了一些输入,以使其更易于阅读。
例子:

import numpy as np

data = np.array(
    [
        [[1,2,3],[1,2,3],[1,2,3]],
        [[2,3,4],[2,3,4],[2,3,4]],
        [[3,4,5],[3,4,5],[3,4,5]],
        [[4,5,6],[4,5,6],[4,5,6]]
    ]
)

print(data[:,1,1])

产出:

[2 3 4 5]
lokaqttq

lokaqttq2#

列表的索引方式不能与numpy数组相同。
看看你的切片发生了什么:
第一部分只是返回整个列表

data[:]
[[[1, 2, 3], [1, 2, 3], [1, 2, 3]],
 [[2, 3, 4], [2, 3, 4], [2, 3, 4]],
 [[3, 4, 5], [3, 4, 5], [3, 4, 5]],
 [[4, 5, 6], [4, 5, 6], [4, 5, 6]]]

第二个切片返回第二个列表(列表索引从0开始,因此索引1是第二个元素)

data[:][1]
Out[46]: [[2, 3, 4], [2, 3, 4], [2, 3, 4]]

第三个片段返回第二个列表中的第二个列表

data[:][1][1]
Out[47]: [2, 3, 4]

如果你想通过列表实现你想要的,你可以使用:

[x[1][1] for x in data]
[2, 3, 4, 5]

循环浏览每个列表并选择第一个列表的第二个元素。
但是,最好使用 numpy ```
import numpy as np
arr = np.array(data)
arr[:, 1, 1]
Out[56]: array([2, 3, 4, 5])

8fsztsew

8fsztsew3#

在python中使用矩阵时,我建议使用 numpy .
您的数据是四个3x3矩阵的列表:

data = [
    [
        [1, 2, 3],
        [1, 2, 3],
        [1, 2, 3]
    ],
    [
        [2, 3, 4],
        [2, 3, 4],
        [2, 3, 4]
    ],
    [
        [3, 4, 5],
        [3, 4, 5],
        [3, 4, 5]
    ],
    [
        [4, 5, 6],
        [4, 5, 6],
        [4, 5, 6]
    ],
]

我们可以轻松地将其转换为numpy阵列:

import numpy as np
data_np = np.array(data)
print(data_np.shape)

最后一条语句返回 (4, 3, 3) --与数据等效的结构是一个三维数组,其中第一个是矩阵的索引,最后两个是每个矩阵元素的索引。现在,您可以沿任意维度进行子采样,包括所需的结果:

data_np[:, 1, 1]

返回 array([2, 3, 4, 5]) . 如果需要,还可以通过 data_np[:, 1, 1].tolist() 还有一个纯python版本,我不推荐使用,但在不太明显的情况下,它可能是一个有用的设计模式。使用列表理解,我们访问每个矩阵,然后检索感兴趣的索引。

[matrix[1][1] for matrix in data]

返回一个列表 [2, 3, 4, 5]

相关问题