# Finds rectangle intersections
## pip install intersectioncalc
### Tested against Windows 10 / Python 3.10 / Anaconda - should work on MacOS / Linux
```python
Finds rectangle intersections in a DataFrame and populates a new column with results.
The function utilizes NumExpr for calculations, which can significantly improve
performance when dealing with large datasets of rectangles
Args:
df (pd.DataFrame): Input DataFrame containing rectangle coordinates.
columns (tuple or list, optional): Names of columns containing rectangle coordinates
(start_x, start_y, end_x, end_y). Defaults to ("start_x", "start_y", "end_x", "end_y").
new_column (str, int, float, optional): Name of the new column to store intersection results.
Defaults to "aa_intersecting".
dtype (np.float32 | np.float64 | np.int32 | np.int64, optional): Data type for calculations. Defaults to np.int32.
convert_to_tuples (bool, optional): If True, converts intersection results to tuples.
Defaults to False.
Returns:
pd.DataFrame: Input DataFrame with the new_column populated with intersection results.
from intersectioncalc import find_rectangle_intersections
import time
import pandas as pd
import numpy as np
min_x = 1
max_x = 100
min_y = 1
max_y = 100
size = 50000
min_width = 1
max_width = 1000
min_height = 1
max_height = 1000
df = pd.DataFrame(
[
(startx := np.random.randint(min_x, max_x, size=size)),
(starty := np.random.randint(min_y, max_y, size=size)),
startx + np.random.randint(min_width, max_width, size=size),
starty + np.random.randint(min_height, max_height, size=size),
]
).T.rename(columns={0: "start_x", 1: "start_y", 2: "end_x", 3: "end_y"})
start = time.perf_counter()
df = find_rectangle_intersections(
df,
columns=("start_x", "start_y", "end_x", "end_y"),
new_column="aa_intersecting",
dtype=np.int32,
convert_to_tuples=False,
)
print(time.perf_counter() - start)
```
Raw data
{
"_id": null,
"home_page": "https://github.com/hansalemaos/intersectioncalc",
"name": "intersectioncalc",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "rectangle,intersections",
"author": "Johannes Fischer",
"author_email": "aulasparticularesdealemaosp@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/61/d4/e1f866109e81da8dd1ccbbece90c69d5ede2000eece1e2aefc722441d8ce/intersectioncalc-0.10.tar.gz",
"platform": null,
"description": "\r\n# Finds rectangle intersections\r\n\r\n## pip install intersectioncalc\r\n\r\n### Tested against Windows 10 / Python 3.10 / Anaconda - should work on MacOS / Linux\r\n\r\n\r\n```python\r\nFinds rectangle intersections in a DataFrame and populates a new column with results.\r\nThe function utilizes NumExpr for calculations, which can significantly improve\r\nperformance when dealing with large datasets of rectangles\r\n\r\nArgs:\r\n df (pd.DataFrame): Input DataFrame containing rectangle coordinates.\r\n columns (tuple or list, optional): Names of columns containing rectangle coordinates\r\n (start_x, start_y, end_x, end_y). Defaults to (\"start_x\", \"start_y\", \"end_x\", \"end_y\").\r\n new_column (str, int, float, optional): Name of the new column to store intersection results.\r\n Defaults to \"aa_intersecting\".\r\n dtype (np.float32 | np.float64 | np.int32 | np.int64, optional): Data type for calculations. Defaults to np.int32.\r\n convert_to_tuples (bool, optional): If True, converts intersection results to tuples.\r\n Defaults to False.\r\n\r\nReturns:\r\n pd.DataFrame: Input DataFrame with the new_column populated with intersection results.\r\n\r\nfrom intersectioncalc import find_rectangle_intersections\r\nimport time\r\nimport pandas as pd\r\nimport numpy as np\r\nmin_x = 1\r\nmax_x = 100\r\nmin_y = 1\r\nmax_y = 100\r\nsize = 50000\r\nmin_width = 1\r\nmax_width = 1000\r\nmin_height = 1\r\nmax_height = 1000\r\ndf = pd.DataFrame(\r\n [\r\n (startx := np.random.randint(min_x, max_x, size=size)),\r\n (starty := np.random.randint(min_y, max_y, size=size)),\r\n startx + np.random.randint(min_width, max_width, size=size),\r\n starty + np.random.randint(min_height, max_height, size=size),\r\n ]\r\n).T.rename(columns={0: \"start_x\", 1: \"start_y\", 2: \"end_x\", 3: \"end_y\"})\r\nstart = time.perf_counter()\r\ndf = find_rectangle_intersections(\r\n df,\r\n columns=(\"start_x\", \"start_y\", \"end_x\", \"end_y\"),\r\n new_column=\"aa_intersecting\",\r\n dtype=np.int32,\r\n convert_to_tuples=False,\r\n)\r\nprint(time.perf_counter() - start) \r\n```\r\n \r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Finds rectangle intersections",
"version": "0.10",
"project_urls": {
"Homepage": "https://github.com/hansalemaos/intersectioncalc"
},
"split_keywords": [
"rectangle",
"intersections"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "04d7f3229f1b9f7e1780dda2990478b65bf812a9a2105e43ab467fcaf4ce812a",
"md5": "f31f4791a6459d323cce9acddb40cec6",
"sha256": "102ac5213a1a3a99647f4fd9209375ef47cfa02fe21909988e65eddf09ad9696"
},
"downloads": -1,
"filename": "intersectioncalc-0.10-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f31f4791a6459d323cce9acddb40cec6",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 22855,
"upload_time": "2023-08-29T23:19:47",
"upload_time_iso_8601": "2023-08-29T23:19:47.131368Z",
"url": "https://files.pythonhosted.org/packages/04/d7/f3229f1b9f7e1780dda2990478b65bf812a9a2105e43ab467fcaf4ce812a/intersectioncalc-0.10-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "61d4e1f866109e81da8dd1ccbbece90c69d5ede2000eece1e2aefc722441d8ce",
"md5": "8b8ded8c14d5dc6fb0f1cdf3d10f532d",
"sha256": "67b13a4bf78bf9500bd10e0793daa96c970b396bd3e5fa53e4cd5b76af7ad723"
},
"downloads": -1,
"filename": "intersectioncalc-0.10.tar.gz",
"has_sig": false,
"md5_digest": "8b8ded8c14d5dc6fb0f1cdf3d10f532d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 22342,
"upload_time": "2023-08-29T23:19:48",
"upload_time_iso_8601": "2023-08-29T23:19:48.588163Z",
"url": "https://files.pythonhosted.org/packages/61/d4/e1f866109e81da8dd1ccbbece90c69d5ede2000eece1e2aefc722441d8ce/intersectioncalc-0.10.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-08-29 23:19:48",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "hansalemaos",
"github_project": "intersectioncalc",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [],
"lcname": "intersectioncalc"
}