为了账号安全,请及时绑定邮箱和手机立即绑定

关于访问元素的 Numpy 问题

关于访问元素的 Numpy 问题

白衣染霜花 2021-08-24 19:01:51
所以我从 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])]


查看完整回答
反对 回复 2021-08-24
?
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 功能。更喜欢显式导入而不是星形导入。


查看完整回答
反对 回复 2021-08-24
  • 2 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信