2016-10-29 101 views
0

這裏是我當前的代碼在Python中,如何創建沒有對角線的上對角線表格?

import numpy as np 
with open("wine.txt","r") as f: 
    stuff=f.readlines() 
z=[] 
for hello in stuff: 
    firstbook=hello.strip().split(",") 
    x=[float(xy) for xy in firstbook] 
    z.append(x) 
u=np.array(z) 
gridList = [] 
for item in range(14): 
    row=[] 
    for nlist in u: 
     row.append(nlist[item]) 
    gridList.append(row) 
column=13 
r=[] 
while column >= 0: 
    recess=column-1 
    while recess >= 0: 
     r.append(np.corrcoef(gridList[recess],gridList[column])) 
     recess=recess - 1 
    column=column-1 
print len(r),r[90][1][0],r[0][1][0] 
print "column -->  1 2 3  4 5 6 7  8 9 10 11 12 13 14" 
print 87*"-" 
chucky=0 
while chucky<1: 
    print "column=", chucky, "|", 
    princess = 90 
    while princess >=77: 
     print round((r[princess][1][0]),2), 
     princess-=1 
    chucky+=1 

我辯論就是否做這個硬盤的方式,寫了一堆while循環,但我知道有一個更簡單的寫這個代碼的方式。我需要創建一個沒有對角線的上對角線表格,總共需要輸入91個值。正如您所看到的,我計算了數據列之間的皮爾遜r值並將其分配給r,我可以在其中通過簡單地爲每個矩陣打印 r[i][1][0] for i in range(90)來檢索每個2×2矩陣的相關值。我知道爲對角線表寫一個上對角表的代碼應該不是問題,但是我遇到的問題與此類似,表的第一行應包含以下值:r [90] [1] [0] r [89] [1] [0] r [87] [1] [0] r [84] [1] [0] etc 。那麼我怎麼用循環來寫這些數值,從90開始,從增加正整數的速度減少到90?

讓我知道如果你想將數據與代碼玩

+0

指數陣列用x [i,j,k]代替[i] [j] ...這樣更容易閱讀。還要確定陣列的形狀和dtype。 – hpaulj

+0

看看np.tri ...函數族;和np.diag ... – hpaulj

+0

謝謝,我會試試這些方法 – user5896534

回答

相關問題