numpy 将n(k,k)个数组转化为(k,k,n)个数组

yqlxgs2m  于 2023-03-23  发布在  其他
关注(0)|答案(2)|浏览(145)

假设我有4个5x5的numpy数组。我需要将它们变成一个5x5x4的numpy数组。将它们放入一个列表中,然后对该列表进行numpy,使它们成为一个4x5x5的数组。所以我想我需要每个元素都是它们给定的x,y元素的数组。我可以在Python中使用蛮力,但我有一种感觉,我只是缺少一些更快的numpy内置。

target = np.zeros((3, 3, 4))
arrays = []

for i in range(4):
    arrays.append(np.zeros((3, 3)))

new_array = []
for y in range(3):
    row = []
    for x in range(3):
        item = []
        for a in range(4):
            item.append(arrays[a][x][y])
        row.append(item)
    new_array.append(row)
final = np.array(new_array)

if final == target:
    print("You've got it")
else:
    print("Not yet, ", final, target)
kh212irz

kh212irz1#

只需使用np.stackaxis=-1参数。

l = [np.random.randint(0,5,(5,5)) for i in range(4)] # 4 5x5 numpy arrays

output = np.stack(l,-1)  #<-----
output.shape
(5, 5, 4)

如果你有一个数组,使用np.stack,然后使用transposeswapaxis,这是一样的。
一个二个一个一个

cotxawn7

cotxawn72#

不使用嵌套的for循环,你可以使用np.swapaxes()
final = np.swapaxes(arrays, 0, 2)
更一般地,可以使用np.stack()

tmp = [np.random.randn(4, 4) for x in range(5)]
np.stack(tmp, axis=-1)

相关问题