使用特定值初始化特定形状的numpy数组

2024-06-16 10:38:44 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,numpy初学者:

我试图创建一个用相应的索引值初始化的形状NxWxHx2数组。在这种情况下,W=H总是。在

例如:对于一个Nx5x5x2形状的数组,如果我把它写在纸上,它应该是:

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    

Tags: innumpy编辑for情况range数组形状
3条回答
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)

这也应该是有效的,实际上只是一个替代保罗坦克的答复。在

一种方法是分配一个空数组

>> out = np.empty((N, 5, 5, 2), dtype=int)

然后用广播,例如

^{pr2}$

或者

>>> out[...] = np.moveaxis(np.indices((5, 5)), 0, 2)

或者

>>> out[..., 0] = np.arange(5)[None, :, None]
>>> out[..., 1] = np.arange(5)[None, None, :]

我会从

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)

相关问题 更多 >