首页 > 解决方案 > 用特定值初始化特定形状的numpy数组

问题描述

嗨 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    

标签: pythonarraysnumpyindexinginitialization

解决方案


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

>> 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, :]

推荐阅读