[英]Matrix Manipulation: Subtract 2D Matrix and 3D Matrix in numpy
如果我有3-d矩阵,例如:
cor =: 3 3 3 $ i.5
cor
0 1 2
3 4 0
1 2 3
4 0 1
2 3 4
0 1 2
3 4 0
1 2 3
4 0 1
和二维矩阵,例如:
d =: 3 3 $ i.5
d
0 1 2
3 4 0
1 2 3
用J语言计算起来真的很简单:在符号后加上“ 2(通过2D矩阵)”。
d -"2 cor
0 0 0
0 0 0
0 0 0
_4 1 1
1 1 _4
1 1 1
_3 _3 2
2 2 _3
_3 2 2
但是我仍然是一个麻木的新手。
cor - d
ValueError: Unable to coerce to Series/DataFrame, dim must be <= 2: (59, 59, 59)
无论如何,我可以在Python Numpy中操纵这种矩阵操纵吗?
提前致谢。
这是我想更改为numpy的python for循环代码
def pcor(df):
cor = df.corr()
n = df.shape[1] # number of indices
pcor = np.empty((n, n, n))
d = np.empty((n, n, n))
for x in range(n):
for y in range(n):
for m in range(n):
if x==y:
pcor[x,y,m] = float('nan')
else:
pcor[x,y,m] = (cor.iloc[x,y] - cor.iloc[x,m]*cor.iloc[y,m])/((1-cor.iloc[x,m]**2)*(1-cor.iloc[y,m]**2))**(1/2)
d[x,y,m] = cor.iloc[x,y] - pcor[x,y,m] # <-- this part!
在减去之前,需要将d的形状(当前为(3,3))与cor的形状(当前为(3,3,3))匹配。 试试cor - d[:None]
。 这主要是告诉numpy的使用d的现有形状( :
),并用于最后一维(创建新的轴None
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.