关于访问元素的 Numpy 问题

所以我从 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]]])


白衣染霜花
浏览 181回答 2
2回答

慕斯709654

这是一个列表理解方法:>>> [np.diagonal(i) for i in test1][array([0, 4, 8]), array([ 9, 13, 17]), array([18, 22, 26])]

www说

有几种方法可以实现您的目标。在这里,我将重点介绍布尔掩码的使用。首先创建布尔 3x3 单位矩阵:即对角线为 True 而 2. 每个非对角线条目均为 False。然后将布尔掩码覆盖在原始 ndarray 上以获得对角线。import numpy as nptest1 = 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 功能。更喜欢显式导入而不是星形导入。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python