在Python 2.7中创建X乘Y维的(a,b)点数组

2 投票
3 回答
4746 浏览
提问于 2025-05-01 09:04

我花了好几个小时在这个问题上,真是有点抓狂,希望能得到一些帮助!

我想创建一个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返回的完整数组元组。

撰写回答