我需要找到多边形内部和多边形上的所有格点。
输入:
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) 我在使用NumPy和/或Pandas使用2D列表时遇到困难:
获得sum所有元素的独特组合,而无需再次选择相同的行(下面的数组应该是81种组合).
打印组合中每个元素的行和列.
例如:
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) 我有一个熊猫数据帧.它看起来像这样:
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)
最有效的方法是什么?
谢谢,
插口
我有一个形状为 (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)
有没有一种方法可以更有效地做到这一点,可能使用矢量化运算?
我想用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解决这个问题吗?
给定任意数量的列表,我想生成一个熊猫DataFrame作为笛卡尔积。例如,给定:
a = [1, 2, 3]
b = ['val1', 'val2']
c = [100, 101]
Run Code Online (Sandbox Code Playgroud)
我想DataFrame以列a、b、 和c以及所有 3x2x2=12 组合结束。
与pandas 中的笛卡尔积不同,我正在寻找提供两个以上输入的能力,并且我不希望传递DataFrames,这将涉及将值保持在相同的范围内DataFrame而不是将其组合。这个问题的答案可能不会与那个问题的答案重叠。
与x 和 y 数组点的笛卡尔积点成 2D 点的单个数组不同,我正在寻找DataFrame带有命名列的 Pandas结果,而不是二维 numpy 数组。
我有两个列表: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')的方式来做到这一点.
我有 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中合并两个数组与所有可能的组合
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 ×9
numpy ×5
pandas ×4
arrays ×2
list ×1
loops ×1
python-2.7 ×1
python-3.x ×1
shapely ×1