所以我从 3 个嵌套列表创建了一个数组(至少我认为它是一个来自 3 个列表的数组),我想访问其中的三个对角元素。我已经创建了数组,但是如何访问其中的三个对角元素?from numpy import *test1 = arange(27).reshape(3,3,3)test1结果:array([[[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8]], [[ 9, 10, 11], [12, 13, 14], [15, 16, 17]], [[18, 19, 20], [21, 22, 23], [24, 25, 26]]])
2 回答
慕斯709654
TA贡献1840条经验 获得超5个赞
这是一个列表理解方法:
>>> [np.diagonal(i) for i in test1]
[array([0, 4, 8]), array([ 9, 13, 17]), array([18, 22, 26])]
www说
TA贡献1775条经验 获得超8个赞
有几种方法可以实现您的目标。在这里,我将重点介绍布尔掩码的使用。
首先创建布尔 3x3 单位矩阵:即对角线为 True 而 2. 每个非对角线条目均为 False。然后将布尔掩码覆盖在原始 ndarray 上以获得对角线。
import numpy as np
test1 = np.arange(27).reshape(3,3,3)
>>> diag = np.eye(3, dtype=bool)
>>> test1[:, diag]
array([[ 0, 4, 8],
[ 9, 13, 17],
[18, 22, 26]])
如您所见,这给出了一个 2d 数组,其中每一行是 3d 数组中第零、第一个和第二个 2d 数组的对应对角线。
顺便说import *一句,避免,它是许多令人头疼的原因,因为 if 破坏了您拥有的命名空间抽象。在上面的例子中,如果 numpydiag定义了一个函数或变量怎么办?同样,如果您在 numpy 之后导入另一个包并且它恰好具有自己的arange功能,您将失去 numpy 的 arange 功能。更喜欢显式导入而不是星形导入。
添加回答
举报
0/150
提交
取消