【问题标题】:Subtraction equivalent of itertools.product()itertools.product() 的减法等价物
【发布时间】:2018-11-17 14:00:06
【问题描述】:

我是一名大学生,正在从事一个分析一些大型数据集的项目。

简化我的问题,我有两组点,在矩阵“A”和“B”中 这样:

A = [[x1, y1], [x2, y2],...] and B = [[x'1, y'1], [x'2, y'2],...] 

我想创建一个函数,它输出一个带有元素的矩阵 C:

Cij  = atan((y'i - yj)/(x'i - xj))

基本上,连接任意两点的线所对的角度(wrt x.axis),每个列表中的一个。 数据集足够大,因此嵌套的 FOR 循环不是一种选择。

目前的尝试将我引向了 itertools 产品功能。 如果有一个等价物在元素之间提供减法(即 y'i-yj ),那么我可以很简单地从那里开始。

有人知道可以提供此功能的东西吗? 或者也许有任何其他方法可以在没有缓慢迭代过程的情况下实现所有这些点之间的角度?

提前致谢,

亚历克斯

【问题讨论】:

  • 为什么 for 循环不是一个选项?你在用python2吗?如果是这样,请尝试将 range 更改为 xrange

标签: python loops matrix nested-loops itertools


【解决方案1】:

使用 numpy 进行这些计算

import numpy as np

A = np.array(A)
B = np.array(B)

C = np.arctan((B[:, None,  1] - A[:, 1]) / (B[:, None, 0] - A[:, 0]))

【讨论】:

  • 这不会返回两个对应点之间的角度,就像 A 的第一个点与 B 的第一个点一样?我对每一个可能的配对或点都要求这样做。有没有一种简单的方法来适应这种情况?
  • 哦对了,对不起,我忘记在B上添加广播了。
猜你喜欢
  • 1970-01-01
  • 2011-06-05
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多