我正在尝试找到一种有效的方法来生成一组x-y坐标,以识别正方形点阵中的每个位置,这样,如果格子由NxN
网格组成,那么</ p>
N = 100; x = range(N)
我想计算一组数组,例如array([[0,0], [0,1], [0,2] ..[0,100], [1,0], [1,1], [1,2], ..[1,100], ...[100,0], [100,1], [100,2], ..[100,100]])
。排序无关紧要。到目前为止,我已经尝试使用itertools.product(x, repeat=2)
,但输出itertools对象不容易转换为上面的2D数组。任何建议都会有所帮助。
答案 0 :(得分:3)
尝试N = 100; result = [[x, y] for x in range(N) for y in range(N)]
答案 1 :(得分:2)
实际上,我认为你已经钉了它,所有你需要做的就是将迭代器转换为一个列表,这是微不足道的:
y = list(itertools.product(x,repeat=2))
答案 2 :(得分:2)
一个numpy解决方案可能是:
$scope.img[nextId] = "img/cloud"+nextId; //change initial img
$timeout( function(){ $scope.img[nextId] = "img/pic"+nextId; }, 1000)`; //change back
这似乎比python方式快得多:
X,Y = np.meshgrid(np.arange(0,100), np.arange(0,100))
result = np.vstack((Y.ravel(), X.ravel())).T
result
# array([[ 0, 0],
# [ 0, 1],
# [ 0, 2],
# ...,
答案 3 :(得分:1)
最小化副本时速度更快:
trader
试验:
def matnp(n):
a=np.arange(n)
b=np.empty((2*n,n),a.dtype)
b[:n]=np.tile(a,n).reshape(n,n)
b[n:]=b[:n].T
return b.reshape(2,n*n).T
和Numba:
In [11]: %timeit matnp(101)
10000 loops, best of 3: 54 µs per loop
测试:
from numba import jit
@jit
def matnb(n):
a=np.empty((n*n,2),np.int)
k=0
for i in range(n):
for j in range(n):
a[k]=i,j
k=k+1
return a
答案 4 :(得分:0)
arr = np.arange(101)
coords = np.transpose([np.repeat(arr, arr.size),np.tile(arr, arr.size)])
print(coords)