想象一下我像这样在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)矩阵,我将如何进行呢? >
答案 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)