首页 > 编程问答 >如何在 Numpy Python 中将 4 维数组的下三角形复制到上三角形?

如何在 Numpy Python 中将 4 维数组的下三角形复制到上三角形?

时间:2024-07-26 05:04:25浏览次数:8  
标签:python numpy triangular

目标是将下三角形复制到上三角形。 根据 OP 中提出的建议,起草了以下代码。

import numpy as np

lw_up_pair = np.tril_indices(4, -1)
arr=np.zeros((4,4,1,1))

arr[1,:1,:,0]=1
arr[2,:2,0,0]=2
arr[3,:3,0,0]=3
arr = arr + arr.T - np.diag(np.diag(arr))

但是,它给出了错误

ValueError:输入必须是1-或2-d。

我可以吗知道如何处理这个问题吗?

预期输出如下

[[[0.]],, [[1.]],, [[2.]],, [[3.]]]
[[[1.]],, [[0.]],, [[2.]],, [[3.]]]
[[[2.]],, [[2.]],, [[0.]],, [[3.]]]
[[[3.]],, [[3.]],, [[3.]],, [[0.]]]

错误“ValueError:输入必须为1-或2-d。”来自你在多维数组上使用 np.diag() 的方式。 np.diag() 在 1-D 数组上使用时用于提取矩阵的对角线,在 2-D 数组上使用时用于从对角线创建对角矩阵。你的数组是 4-D 的,因此它失败了。

你可以通过使用高级索引来实现这一点,而无需使用 np.diag()

import numpy as np

# 创建示例数组
arr = np.zeros((4, 4, 1, 1))
arr[1, :1, :, 0] = 1
arr[2, :2, 0, 0] = 2
arr[3, :3, 0, 0] = 3

# 获取下三角和上三角的索引
lw_up_pair = np.tril_indices(4, -1)
up_lw_pair = (lw_up_pair[1], lw_up_pair[0])

# 将下三角复制到上三角
arr[up_lw_pair] = arr[lw_up_pair]

print(arr)

这将产生所需的输出:

[[[[0.]]
  [[1.]]
  [[2.]]
  [[3.]]]

 [[[1.]]
  [[0.]]
  [[2.]]
  [[3.]]]

 [[[2.]]
  [[2.]]
  [[0.]]
  [[3.]]]

 [[[3.]]
  [[3.]]
  [[3.]]
  [[0.]]]]

这段代码的工作原理如下:

  1. 获取下三角和上三角的索引:
  2. np.tril_indices(4, -1) 返回一个包含下三角索引的元组 (rows, cols) ,不包括主对角线。
  3. 我们通过反转 lw_up_pair 中的 rows 和 cols 索引来获得上三角的相应索引,将其存储在 up_lw_pair 中。

  4. 将下三角复制到上三角:

  5. 我们使用高级索引直接将下三角的值分配给上三角,利用了计算出的索引。

这种方法避免使用 np.diag() ,并通过直接索引操作有效地解决了该问题。

标签:python,numpy,triangular
From: 65051653

相关文章

  • 如何使用 NumPy 根据值在矩阵中的出现情况来组织值?
    我正在做一个练习,需要根据3x3矩阵中的出现情况将0到5之间的值组织到一个数组中。我正在使用NumPy来完成此任务。给定以下3x3矩阵:[[113][452][300]]我想输出一个数组,其中每个元素代表从0到5的每个值出现的次数。对于上述矩阵,所需的输出是:[2,2......
  • 如何在 Python 中对多行使用单个 INSERT INTO 语句?
    我目前正在开发一个DiscordPython机器人,我在其中循环遍历ForumTags列表,并为每个对象生成INSERTINTOSQL语句以将数据插入MySQL数据库。但是,我想要通过将所有这些单独的INSERTINTO语句组合到单个查询中来优化我的代码,如下所示:INSERTINTO......
  • 仅将 sympy Matrix 的上三角值从 numpy.triu() 复制到数组中?
    我有一个方阵A(可以是任何大小),我想获取上三角部分并将这些值放入一个数组中,而没有中心对角线下方的值(k=0)。A=sympy.Matrix([[4,0,3],[2,4,-2],[-2,-3,7]])使用A_upper=numpy.triu(A)让我A_Upper=sympy.M......
  • 双 for 循环的 Pythonic 方式
    我有以下代码:importnumpyasnpepsilon=np.array([[0.,0.00172667,0.00071437,0.00091779,0.00154501],[0.00128983,0.,0.00028139,0.00215905,0.00094862],[0.00035811,0.00018714,0.,0.00029365,0.00036993......
  • 在 matplotlib 中绘制一个字符串函数 // 将 str 解释为 python 代码?
    我正在创建一个RPN计算器,尝试绘制用户给出的函数。例如,如果用户输入"xsin3*plot"我希望它绘制sin(x)*3其代码如下。注意:问题在ifprompt=="plot"userInputX=""#userInputXisalwaysreplacedbefore......
  • Python (Pebble) - 超时功能。当 TimeoutError 发生时,获取从 iterable 传递给函数的值
    我正在尝试在Pebble中设置工作超时(基本上有效)frompebbleimportProcessPoolfrommultiprocessingimportProcess,Pool,cpu_countimporttimedeftest_fn(randomNumberFromList):#print(f'Beginngingforthisnumber:{randomNumberFromList}')ifr......
  • 为什么在 Python 上使用正则表达式组功能会给出不同的输出
    importrestring1="aaabaa"zusuchen="aa"#1m_start=re.finditer(fr'(?=({zusuchen}))',string1)results=[(match.start(1),match.end(1)-1)formatchinm_start]forzinresults:print(z)print("Now#2:"......
  • 如何在python3中找到文件的长度?
    我的第一个.py:defcreate_file(file_name):list=["ab","cd","ef"]foriinlist:withopen(file_name,"a+")asinput_file:print("{}".format(i),file=input_file)我的第二个.py:fromfirstimport......
  • 哪种 python 日志记录风格是推荐的或标准的?
    我是Python新手。介于以下2个选项之间。对于python来说,推荐哪种风格或者更好?logging.info(f"Won'tsavemodelasscoreisbelow0,score:{score}")logging.info("Won'tsavemodelasscoreisbelow0,score%s",score)我个人更喜欢第二种方法。在Python......
  • python 协程 自定义互斥锁
    最近在用python的一款异步web框架sanic搭建web服务,遇到一个需要加特定锁的场景:同一用户并发处理订单时需要排队处理,但不同用户不需要排队。如果仅仅使用asyncwithasyncio.Lock()的话。会使所有请求都排队处理。1importasyncio2importdatetime34lock=asyncio.L......