我有一个二维数组:
MyArray = array([6588252.24, 1933573.3, 212.79, 0, 0],
[6588253.79, 1933602.89, 212.66, 0, 0],
etc...)
Run Code Online (Sandbox Code Playgroud)
前两个元素MyArray[0],并MyArray[1]是X和Ÿ点的坐标.
对于数组中的每个元素,我想找到以半径X单位返回其单个最近邻居的最快方法.我们假设这是在2D空间.
让我们说这个例子X = 6.
我通过将每个元素与每个其他元素进行比较来解决问题,但是当列表长度为22k点时,这需要15分钟左右.我们希望最终在大约3000万点的名单上运行.
我已经阅读了关于Kd树并了解基本概念,但却无法理解如何编写脚本.
好的我有两个模块,每个模块都包含一个类,问题是它们的类互相引用.
让我们说例如我有一个房间模块和一个包含CRoom和CPerson的人员模块.
CRoom类包含有关房间的信息,以及房间中每个人的CPerson列表.
然而,CPerson类有时需要将CRoom类用于它的房间,例如找到门,或者看看房间里还有谁.
问题是两个模块互相导入我只是得到一个导入错误,其中第二次导入:(
在c ++中,我可以通过仅包含头来解决这个问题,因为在这两种情况下类都只有指向另一个类的指针,前向声明就足以满足标题,例如:
class CPerson;//forward declare
class CRoom
{
std::set<CPerson*> People;
...
Run Code Online (Sandbox Code Playgroud)
反正有没有在python中执行此操作,除了将两个类放在同一个模块或类似的东西?
编辑:添加了使用上面的类显示问题的python示例
错误:
回溯(最近一次调用最后一次):
文件"C:\ Projects\python\test\main.py",第1行,
从房间导入CRoom
文件"C:\ Projects\python\test\room.py",第1行,
来自人员导入CPerson
文件"C:\ Projects\python\test\person.py",第1行,
从房间导入 CRoom
ImportError:无法导入名称
CRoom room.py
from person import CPerson
class CRoom:
def __init__(Self):
Self.People = {}
Self.NextId = 0
def AddPerson(Self, FirstName, SecondName, Gender):
Id = Self.NextId
Self.NextId += 1#
Person = CPerson(FirstName,SecondName,Gender,Id)
Self.People[Id] = Person
return Person
def FindDoorAndLeave(Self, PersonId):
del Self.People[PeopleId]
Run Code Online (Sandbox Code Playgroud)
person.py
from room import CRoom
class CPerson:
def __init__(Self, …Run Code Online (Sandbox Code Playgroud) 我是C的初学者,我正在尝试理解qsort函数所需的比较函数.
一个简单的建议用法就是这个(我已经包含了一些main()代码来打印结果):
#include <stdio.h>
#include <stdlib.h>
int values[] = { 40, 10, 100, 90, 20, 25, 12, 13, 10, 40 };
int compare(const void *a, const void *b)
{
const int *ia = (const int *)a; // casting pointer types
const int *ib = (const int *)b;
return *ia - *ib;
}
int main()
{
int n;
for (n=0; n<10; n++)
{
printf("%d ",values[n]);
}
printf("\n");
qsort(values, 10, sizeof(int), compare);
for (n=0; n<10; n++)
{
printf("%d ",values[n]);
}
printf("\n"); …Run Code Online (Sandbox Code Playgroud) 有很多方法描述如何使用各种方法在此站点上打印文本文件的行:
它们似乎都是根据具体的例子量身定制的.
如果能够使用最清晰,最简洁,最简单的方法,那就太棒了:将任何文本文件的每一行打印到屏幕上.优选地详细说明每条线的作用.
简洁明了的要点.
Scipy(http://www.scipy.org/)提供两个KD Tree类; KDTree和cKDTree.
cKDTree要快得多,但是比KDTree更少可定制和查询(据我从文档中可以看出).
这是我的问题: 我有一个3百万二维(X,Y)点的列表.我需要从每个点返回X单位距离内的所有点.
使用KDtree,有一个选项可以做到这一点:KDtree.query_ball_tree()它生成一个列表,其中包含每个其他点的X个单位内的所有点.但是:这个列表很庞大,很快就会填满我的虚拟内存(大约7.44亿个项目).
潜在的解决方案#1:有没有办法在写入时将此列表解析为文本文件?
潜在的解决方案#2:我尝试使用for循环(对于列表中的每个点),然后通过使用:找到X单位内的单点邻居KDtree.query_ball_point().但是:这需要永远,因为它需要运行数百万次查询.是否有与此KDTree工具相当的cKDTree?
潜在的解决方案#3:打败我,其他人有什么想法?