相关疑难解决方法(0)

获取位于 Shapely 多边形内的所有格点

我需要找到多边形内部和多边形上的所有格点。

输入:

from shapely.geometry import Polygon, mapping
sh_polygon = Polygon(((0,0), (2,0), (2,2), (0,2)))
Run Code Online (Sandbox Code Playgroud)

输出:

(0, 0), (1, 0), (2, 0), (0, 1), (1, 1), (2, 1), (0, 2), (1, 2), (2, 2)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请建议是否有办法在使用或不使用 Shapely 的情况下获得预期结果。

我编写了这段代码,它给出了多边形内部的点,但它没有给出多边形上的点。还有更好的方法来做同样的事情:

from shapely.geometry import Polygon, Point

def get_random_point_in_polygon(poly):
    (minx, miny, maxx, maxy) = poly.bounds
    minx = int(minx)
    miny = int(miny)
    maxx = int(maxx)
    maxy = int(maxy)
    print("poly.bounds:", poly.bounds)
    a = []
    for x in range(minx, maxx+1):
        for y in range(miny, maxy+1):
            p = Point(x, y) …
Run Code Online (Sandbox Code Playgroud)

python mathematical-lattices shapely

5
推荐指数
2
解决办法
5224
查看次数

NumPy - 迭代2D列表和打印(行,列)索引

我在使用NumPy和/或Pandas使用2D列表时遇到困难:

  1. 获得sum所有元素的独特组合,而无需再次选择相同的行(下面的数组应该是81种组合).

  2. 打印组合中每个元素的行和列.

例如:

arr = [[1, 2, 4], [10, 3, 8], [16, 12, 13], [14, 4, 20]]

(1,3,12,20), Sum = 36 and (row, col) =  [(0,0),(1,1),(2,1),(3,2)]

(4,10,16,20), Sum = 50 and (row, col) =[(0,2),(1,0),(2,0),(3,2)]
Run Code Online (Sandbox Code Playgroud)

python numpy pandas

4
推荐指数
1
解决办法
1882
查看次数

高效扁平化大熊猫数据帧

我有一个熊猫数据帧.它看起来像这样:

pd.DataFrame(data=np.arange(1,10).reshape(3,3), index=['A', 'B', 'C'], columns=['A', 'B', 'C'])
Run Code Online (Sandbox Code Playgroud)

但有100行和100列.

我想压扁它,所以它看起来像这样:

pd.DataFrame({'row' : ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'], 'col' : ['A', 'B', 'C']*3, 'val' : np.arange(1,10)})
Run Code Online (Sandbox Code Playgroud)

最有效的方法是什么?

谢谢,

插口

python numpy pandas

4
推荐指数
1
解决办法
119
查看次数

如何有效地将 4D numpy 数组转换为以索引作为列的 pandas DataFrame?

我有一个形状为 (4, 155, 240, 240) 的 4D numpy 数组。我想创建一个 pandas DataFrame,其中该数组的每个元素一行,五列:一列对应四个索引中的每一个,一列对应数组中的值。我现在使用的代码如下所示:

import pandas as pd
import numpy as np

# some array of this shape
im = np.zeros((4, 155, 240, 240))

df = {col: [] for col in ['mode', 'x', 'y', 'z', 'val']}
for idx, val in np.ndenumerate(im):
    df['mode'].append(idx[0])
    df['y'].append(idx[1])
    df['x'].append(idx[2])
    df['z'].append(idx[3])
    df['val'].append(val)
df = pd.DataFrame(df)
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以更有效地做到这一点,可能使用矢量化运算?

python arrays numpy python-2.7 pandas

2
推荐指数
1
解决办法
6023
查看次数

使用numpy创建特定的数组

我想用numpy创建这种数组:

[[[0,0,0], [1,0,0], ..., [1919,0,0]],
 [[0,1,0], [1,1,0], ..., [1919,1,0]],
 ...,
 [[0,1019,0], [1,1019,0], ..., [1919,1019,0]]]
Run Code Online (Sandbox Code Playgroud)

我可以通过以下方式访问:

>>> data[25][37]
array([25, 37, 0])
Run Code Online (Sandbox Code Playgroud)

我试过用这种方式创建一个数组,但它并不完整:

>>> data = np.mgrid[0:1920:1, 0:1080:1].swapaxes(0,2).swapaxes(0,1)
>>> data[25][37]
array([25, 37])
Run Code Online (Sandbox Code Playgroud)

你知道怎么用numpy解决这个问题吗?

python numpy

2
推荐指数
2
解决办法
104
查看次数

熊猫中任意列表的笛卡尔积

给定任意数量的列表,我想生成一个熊猫DataFrame作为笛卡尔积。例如,给定:

a = [1, 2, 3]
b = ['val1', 'val2']
c = [100, 101]
Run Code Online (Sandbox Code Playgroud)

我想DataFrame以列ab、 和c以及所有 3x2x2=12 组合结束。

pandas 中的笛卡尔积不同,我正在寻找提供两个以上输入的能力,并且我不希望传递DataFrames,这将涉及将值保持在相同的范围内DataFrame而不是将其组合。这个问题的答案可能不会与那个问题的答案重叠。

x 和 y 数组点的笛卡尔积点成 2D 点的单个数组不同,我正在寻找DataFrame带有命名列的 Pandas结果,而不是二维 numpy 数组。

python pandas

2
推荐指数
1
解决办法
1539
查看次数

Pythonic写循环的方法

我有两个列表:a = [1, 2, 3]b = [4, 5, 6].

我在python中使用了两个循环来减去每个元素的b每个元素a.

import numpy as np
a = [1, 2, 3]
b = [4, 5, 6]
p = -1
result = np.zeros(len(a)*len(a))
for i in range(0,len(a)):
    for j in range(0,len(a)):
        p = p + 1
        result[p] = a[i] - b[j]
Run Code Online (Sandbox Code Playgroud)

我的结果是对的:result = [-3., -4., -5., -2., -3., -4., -1., -2., -3.].

但是,我想知道是否有更优雅('pythonic')的方式来做到这一点.

python loops list

1
推荐指数
3
解决办法
7280
查看次数

Python itertools.product 因更高的数字而冻结

我有 6 个不同范围的变量。我想用我的代码创建可能性池。在这个例子中,我为每个变量提供了 10 个范围,但我必须给它们大约 200 个范围。但是每当我试图超过 20 个范围(例如 30 个范围)时,Python 都会杀死自己,有时它会冻结计算机。有没有办法让它更快更稳定?

谢谢。

import itertools

a = [x for x in range(400,411)]
b = [x for x in range(400,411)]
c = [x for x in range(400,411)]
d = [x for x in range(400,411)]
e = [x for x in range(400,411)]
f = [x for x in range(400,411)]

fl = lambda x: x

it = filter(fl, itertools.product(a,b,c,d,e,f))

posslist = [x for x in it]

print(len(posslist))
Run Code Online (Sandbox Code Playgroud)

python python-itertools python-3.x

1
推荐指数
1
解决办法
1167
查看次数

Python使用numpy合并两个数组

我想在python中合并两个数组与所有可能的组合

ex a = [1,2,3]和b = [4,5,6]应该给出输出

c= [(1,4),(1,5),(1,6)  
   (2,4),(2,5),(2,6)  
   (3,4),(3,5),(3,6)]
Run Code Online (Sandbox Code Playgroud)

按此特定顺序(即3x3的顺序).订单在这里特别重要

python arrays numpy

-3
推荐指数
1
解决办法
229
查看次数