python - 数组中元素之间的相对差异
问题描述
我需要 (n, 3) 数组的第一列中的每个元素的差异x2 - x1
n次,以便产生 (n, n) 数组。意思是,我需要:
[0,0] - [0,0], [1,0] - [0,0], [2,0] - [0,0],...[n,0] - [0,0]
[0,0] - [1,0], [1,0] - [1,0], [2,0] - [1,0],...[n,0] - [0,0]
:
[0,0] - [n,0], [1,0] - [n,0], [2,0] - [n,0],...[n,0] - [n,0]
我试过numpy.diff(a[:,0])
了,虽然这只产生直接相邻元素之间的差异,即[1,0] - [0,0], [2,0] - [1,0],...[n,0] - [n-1,0]
.
解决方案
绝对不要使用三个嵌套的 for 循环来解决此类问题。
老实说,我不太了解您的最终目标,但是IIUC,您可以使用广播
(a - a[:, None])[..., 0]
产生
array([[ 0, -2, 3],
[ 2, 0, 5],
[-3, -5, 0]])
如果要对第二列执行相同的操作,只需使用[..., 1]
etc。
如果您真的只需要在第一列中进行此操作(而不是在其他列中),那么计算所有内容然后提取第一个结果可能会过大。您可以先切片,然后使用广播进行减法
f = a[:, 0]
f - f[:, None]
推荐阅读
- checkbox - 将复选框值从表单传递到 Thymeleaf 中的控制器
- node.js - 获取 SyntaxError:运行 Lambda 测试时位置 0 处 JSON 中的意外标记 u
- python - 当尝试使用 scope.reusevariables() 重用 cudnnGRU 变量时,Tensorflow 1.11.0 会引发错误
- python - 检查包含列表、元组的子列表中是否存在列表
- java - 我可以在删除查询中使用 SET LOCK_TIMEOUT 吗?
- javascript - RegEx - 获得最短匹配
- matlab - 如何将此 2x2 矩阵转换为所示的 3x3 矩阵?
- javascript - 在 jquery 中确定在一组相似元素中单击了哪个元素
- android - Android Studio Espresso 测试记录器慢
- android - ForegroundService 没有从片段开始?