python - `numpy.ufunc.outer` 仅适用于某些轴
问题描述
我在空间中有两个 numpy 1D 点数组,我想要每个数组中的点之间的成对差异的 2D 数组。碰巧的是,如果空间是一维的,那么我想要的就相当于
x,y = np.array([1,2,3,4]),np.array([3,4,5,6])
np.difference.outer(x,y)
对于 Nd 空间的差异,我该如何做到这一点?
解决方案
这是一种使用 3D 矩阵的方法,它适用于许多维度。
import numpy as np
N = 4 # number of vectors
p = 3 # vector dimensionality
x = np.arange(0, p * N).reshape((N, p))
y = np.arange(2, 2 + p * N).reshape((N, p))
Y = np.zeros((N, N, p))
Y[:] = y # setting rows
X = np.zeros((N, N, p))
X[:] = x
X = np.einsum("ijk->jik", X) # swap rows and columns
diff = np.subtract(X, Y) # reproduces 1D result with p = 0 and print(diff[:,:,0])
使用索引设置 X 矩阵的列可能比设置行然后执行特定的转置更简单。
推荐阅读
- vue.js - 使用 router.push 更新路由后无法调度操作
- java - IntelliJ 无法识别 Maven 依赖项
- android - 适用于 Android 的 H3 地理覆盖
- spring-security - 成功 SAML 身份验证后出现 403“无效 CORS 请求”
- picamera - 安装 picamera 时出现问题(错误:命令出错,退出状态为 1:)
- php - 具有隐藏属性的功能测试身份验证
- powershell - PowerShell Start-Job 未运行脚本块
- javascript - 我如何单击并且可以在 Javascript 上显示自己的类
- unity3d - 2d 文本聚焦在相机上,但当相机围绕对象旋转时旋转 180
- javascript - I18n-js - 有没有办法检查翻译是否存在?