【问题标题】:What is an alternative to retrieving diagonal elements without looping or calling np.diag()?在不循环或调用 np.diag() 的情况下检索对角线元素的替代方法是什么?
【发布时间】:2022-09-28 03:51:01
【问题描述】:

我有一个 4x4 数组 A1,需要在不循环或调用 np.diag() 的情况下检索其对角线元素。这样做的方法是什么?感谢你的帮助!

A1 = np.array([ [1, 4, 6, 8],[2, 5, 7, 10],[3, 6, 9, 13], [11, 12, 16, 0]])

  • np.diag() 是最明智的解决方案。你为什么拒绝它?

标签: python arrays numpy loops diagonal


【解决方案1】:

通过使用对角线的索引进行索引,这些对角线是单位矩阵的非零点的索引。

import numpy as np

A1 = np.array([ [1, 4, 6, 8],[2, 5, 7, 10],[3, 6, 9, 13], [11, 12, 16, 0]])
diag_pos = np.eye(A1.shape[0],dtype=bool).nonzero()
print(A1[diag_pos])
[1 5 9 0]

【讨论】:

  • 太感谢了!你能解释一下代码吗?我对 shape[0] 和 dtype=bool 感到特别困惑。
  • @rabeca A1.shape 是矩阵的形状,即(4,4)[0] 只是获取第一个4,因为这个函数只需要一个数字而不是两个,至于dtype=bool 你可以省略它并且代码将起作用,它只是通过在内存中使用较小的大小(布尔值而不是浮点数)使这段代码稍微快一些,这并不重要。
猜你喜欢
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 1970-01-01
  • 1970-01-01
  • 2020-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多