python - 如何在 numpy 或 pytorch 中矢量化自定义算法?
问题描述
假设我有两个矩阵:
A: size k x m
B: size m x n
使用自定义操作,我的输出将是k x n.
此自定义操作不是 的行A
和列之间的点积B
。假设这个自定义操作定义为:
对于 的第 I 行第A
J 列B
,输出的i,j
元素为:
sum( (a[i] + b[j]) ^20 ), i loop over I, j loops over J
我能看到实现这一点的唯一方法是扩展这个方程,计算每个项,然后对它们求和。
numpy 或 pytorch 有没有办法在不扩展方程的情况下做到这一点?
解决方案
除了@hpaulj 在评论中概述的方法之外,您还可以使用您正在计算的本质上是成对 Minkowski 距离的事实:
import numpy as np
from scipy.spatial.distance import cdist
k,m,n = 10,20,30
A = np.random.random((k,m))
B = np.random.random((m,n))
method1 = ((A[...,None]+B)**20).sum(axis=1)
method2 = cdist(A,-B.T,'m',p=20)**20
np.allclose(method1,method2)
# True
推荐阅读
- sql-server - 部署 SSIS 包的问题
- javascript - 为什么我的函数向返回未定义的对象数组添加键和增量值
- c# - msgraph:如何使用 GraphServiceClient 创建批量订阅请求?
- excel - 宏:打开文件夹中的最新文件并复制粘贴到最后一个单元格下方
- reactjs - react-papaparse meta.fields 未定义
- c# - 如何使用 C# 泛型完成以下任务?
- android-webview - Google WebView 故障导致的崩溃是什么?
- azure-active-directory - Azure AD B2C 声明不包括映射的自定义 IdP 声明
- java - 使用charts.mini.js 显示两个图表的问题
- java - 我在 Vscode 中使用我的 java eclipse 项目时遇到问题