我是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]
. 这不是我想要的。有人能告诉我我做错了什么吗?
3条答案
按热度按时间vi4fp9gy1#
我建议使用
numpy
包,这是伟大的做各种矩阵和向量运算。它使索引更容易。请注意,我在数据数组中添加了一些输入,以使其更易于阅读。
例子:
产出:
lokaqttq2#
列表的索引方式不能与numpy数组相同。
看看你的切片发生了什么:
第一部分只是返回整个列表
第二个切片返回第二个列表(列表索引从0开始,因此索引1是第二个元素)
第三个片段返回第二个列表中的第二个列表
如果你想通过列表实现你想要的,你可以使用:
循环浏览每个列表并选择第一个列表的第二个元素。
但是,最好使用
numpy
```import numpy as np
arr = np.array(data)
arr[:, 1, 1]
Out[56]: array([2, 3, 4, 5])
8fsztsew3#
在python中使用矩阵时,我建议使用
numpy
.您的数据是四个3x3矩阵的列表:
我们可以轻松地将其转换为numpy阵列:
最后一条语句返回
(4, 3, 3)
--与数据等效的结构是一个三维数组,其中第一个是矩阵的索引,最后两个是每个矩阵元素的索引。现在,您可以沿任意维度进行子采样,包括所需的结果:返回
array([2, 3, 4, 5])
. 如果需要,还可以通过data_np[:, 1, 1].tolist()
还有一个纯python版本,我不推荐使用,但在不太明显的情况下,它可能是一个有用的设计模式。使用列表理解,我们访问每个矩阵,然后检索感兴趣的索引。返回一个列表
[2, 3, 4, 5]