如果我有三维矩阵:
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
以及二维矩阵:
^{pr2}$用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)
我能用pythonnumpy操作这种矩阵操作吗??在
提前谢谢。在
这是python for循环代码,我想把它改成numpy
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
)创建一个新的轴。在相关问题 更多 >
编程相关推荐