在Python 2.7中创建X乘Y维的(a,b)点数组
我花了好几个小时在这个问题上,真是有点抓狂,希望能得到一些帮助!
我想创建一个100x100的数组,里面的每个位置都代表一个 (x,y)
坐标。我的最终目标是这样的:
我有一些 (x,y)
坐标,想把它们放在一个二维空间里,这样我就可以用 np.diagonal
函数来获取沿着一条线的 (x,y)
坐标。然后我会用这些 (x,y)
点来比较一些特定的值。
第一步其实就是创建这个数组,但我就是搞不定。
3 个回答
1
如果你只想要对角线上的值,为什么不直接创建一个一维列表呢?
import numpy as np
xs = np.linspace(1,10,100) # assuming x goes form 1 to 10
ys = np.linspace(2,3, 100) # assuming y goes from 2 to 3
xy = zip(xs, ys)
这样你就不需要二维数组,然后再去提取对角线的值了。
1
我不太确定你提到的numpy部分,不过你可以这样创建数组:
coords = [[(y,x) for x in range(100)] for y in range(100)]
>>> coords[50][2]
(50,2)
1
根据Jaime的建议进行工作:
>>> x, y = numpy.mgrid[0:100, 0:100]
>>> z = numpy.array([x, y]).transpose([1,2,0])
>>> z[50, 2]
array([50, 2])
补充说明:假设你有一个形状为(2, P)的点数组p,下面是你如何找出哪些点在对角线n的下面:
>>> d = numpy.diagonal(z, n)
>>> cond0 = p[0, None] < d[0, :, None]
>>> cond1 = p[1, None] < d[1, :, None]
>>> good_indices_full = numpy.where(numpy.logical_and(cond0, cond1))
>>> good_indices = good_indices_full[1]
我更喜欢使用“good_indices”,也就是说,我会写像p[:, good_indices]这样的代码,而不是使用numpy.where返回的完整数组元组。