python - 通过向量的差异对矩阵创建进行向量化(例如,对于 numpy)
问题描述
我经常需要A[i,j]
根据给定的向量计算矩阵v[i]
:
A[i, j] = v[j] - v[i]
这在嵌套循环中很简单,但我想对其进行矢量化。到目前为止,我只提出了另外创建两个矩阵的相当丑陋的解决方案,其中 v 在每一行/列中重复,因此我可以使用简单的逐元素矩阵加法。
这是一个 numpy 示例:
import numpy as np
length = 10
v = np.random.random(length)
vjMatrix = np.broadcast_to(v, (length, length))
viMatrix = np.transpose(vjMatrix)
A = vjMatrix - viMatrix
print(A)
但是,我希望有一个更优雅的解决方案,我只是看不到。我浏览了很多线程,但没有找到特别合适的东西。
谢谢!
解决方案
如果我正确理解你的问题,你目前填充数组,A
如:
import numpy as np
length = 100
np.random.seed(123)
v = np.random.rand(length)
vjMatrix = np.broadcast_to(v, (length, length))
viMatrix = np.transpose(vjMatrix)
A = vjMatrix - viMatrix
如果这是您想要的,您可以v
通过广播向量来替换循环和显式创建 -matrices v
:
A_new = v - v[:, None]
print(np.all(A == A_new))
# Out: True
推荐阅读
- excel - SSIS 执行包失败
- reporting-services - 如何为 SSRS 中的所有报告订阅提供一个中心位置?
- c# - 我无法让我的精灵降落在我的平台之上
- python - 在 Django 设置中找不到使用 venv 安装的包
- html - primeng p-tree中的全行选择
- r - Shiny:使用 fileInput() 和 selectizeInput() 自动化 Web 应用程序
- php - 如何确保一个特定的 PHPUnit 测试用例在其他测试用例之前运行?
- linux - 从bash中的列转换日期
- git - GitLab 致命:无法访问:请求的 URL 返回错误:503
- c# - C# WPF ListView 没有正确删除项目