嗨numpy初学者在这里:
我正在尝试创建一个使用相应索引值初始化的形状NxWxHx2数组。在这种情况下,W = H总是。
例如:对于形状为Nx5x5x2的数组,如果我在Paper上写它应该是:
N次以下
(0,0)(0,1)(0,2)(0,3)(0,4)
(1,0)(1,1)(1,2)(1,3)(1,4)
(2,0)(2,1)(2,2)(2,3)(2,4)
(3,0)(3,1)(3,2)(3,3)(3,4)
(4,0)(4,1)(4,2)(4,3)(4,4)
我查看了“arange”fkt以及使用“newaxis”扩展数组但无法获得所需的结果。
抱歉可怕的形成。感谢您的帮助!
编辑:我想出了类似的东西,但这并不好。 对于1x3x3x2形状的数组
t = np.empty([1,3,3,2])
for n in range(1):
for i in range(3):
for p in range(3):
for r in range(2):
if r == 0:
t[n,i,p,r]=i
else:
t[n,i,p,r]=p
答案 0 :(得分:2)
一种方法是分配一个空数组
>> out = np.empty((N, 5, 5, 2), dtype=int)
然后使用广播,例如
>>> out[...] = np.argwhere(np.ones((5, 5), dtype=np.int8)).reshape(5, 5, 2)
或
>>> out[...] = np.moveaxis(np.indices((5, 5)), 0, 2)
或
>>> out[..., 0] = np.arange(5)[None, :, None]
>>> out[..., 1] = np.arange(5)[None, None, :]
答案 1 :(得分:1)
我从
开始W=5; H=5; N=3
a = [[(h, w) for w in range(W)] for h in range(H)]
Out[1]:
[[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4)],
[(1, 0), (1, 1), (1, 2), (1, 3), (1, 4)],
[(2, 0), (2, 1), (2, 2), (2, 3), (2, 4)],
[(3, 0), (3, 1), (3, 2), (3, 3), (3, 4)],
[(4, 0), (4, 1), (4, 2), (4, 3), (4, 4)]]
arr = [a for i in range(N)]
arr = np.array(arr)
答案 2 :(得分:0)
import numpy as np
x, y = np.mgrid[0:5, 0:5]
arr = np.array(zip(y.ravel(), x.ravel()), dtype=('i,i')).reshape(x.shape)
这也应该有效,而且实际上只是Paul Panzer回复的替代方案。