拆分一个numpy矩阵,然后在处理后重新加入?

时间:2018-06-19 20:54:15

标签: python numpy matrix

想象一下我像这样在numpy中有一个3-D矩阵

(1,5) | (2,6)
------|------
(3,7) | (4,8)

我希望将其分为以下两个二维矩阵

1 | 2   5 | 6
--|-- , -----
3 | 4   7 | 8

所以原始矩阵是形状(2、2、2),我希望将其分成大小为(2、2)的两个矩阵

那么,假设我对各个矩阵进行了一些处理,并希望将它们从两个(2,2)矩阵重新组合为一个(2,2,2)矩阵,我将如何进行呢? >

3 个答案:

答案 0 :(得分:2)

假设确实需要对每个子矩阵应用一个函数(例如foo()),下面的代码可以完成此工作:

result = np.stack( # Combine
                  [foo(a[:,:,i].T) # Apply
                   for i in range(a.shape[2])], # Split
                   axis=2)

答案 1 :(得分:1)

您可以使用np.swapaxes,但我同意@kabanus的评论,根据您的目标,可能没有必要。

a = np.array([1, 5, 3, 7, 2, 6, 4, 8]).reshape(2, 2, 2)

b = np.swapaxes(a, 0, 2)

for i in range(len(b)):
    print(b[i])
    b[i] = (i + 1) * b[i] # do something

c = np.swapaxes(b, 0, 2)

答案 2 :(得分:0)

这是一种方法:

>>> import numpy as np
>>> x=np.array((((1,5),(2,6)),((3,7),(4,8))))
>>> x
array([[[1, 5],
        [2, 6]],

       [[3, 7],
        [4, 8]]])
>>> x[:,:,0]=x[:,:,0]-1
>>> x[:,:,1]=x[:,:,1]*2
>>> x
array([[[ 0, 10],
        [ 1, 12]],

       [[ 2, 14],
        [ 3, 16]]])

您可以将赋值的右侧更改为任何返回适当大小的向量的函数,特别是函数f(x[:,:,i]),该函数返回相同长度的向量。我强调这一点是因为模糊通常会减少点数,因此您必须考虑这是否对您有意义。假设此功能比loopinh存在:

for i in range(x.shape[2]): x[:,:,i] = f(x[:,:,i])

如果要更改大小,则@Dyz的答案是解决方法。哦,差点忘了,有一个功能可以实现:

x = np.apply_along_axis(lambda a: a*3,2,x)