矩阵处理:以numpy减去2D矩阵和3D矩阵

时间:2018-07-26 13:47:39

标签: python numpy matrix j

如果我有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!

1 个答案:

答案 0 :(得分:2)

在减去之前,需要将d的形状(当前为(3,3))与cor的形状(当前为(3,3,3))匹配。尝试<mat-button-toggle-group [(ngModel)]="selectedValue" (change)="takeSelectedValue(selectedValue)"> <mat-button-toggle *ngFor="let number of numbers" value="{{number+1}}"> <span>{{number + 1}}</span> </mat-button-toggle> </mat-button-toggle-group> 。这基本上告诉numpy使用d(cor - d[:None])的现有形状并为最后一个尺寸(:)创建一个新轴。