2016-12-06 16 views
2

ループ内でnumpy.arrayに行を追加しようとしましたが、エラーは発生しませんが、動作しません。私の一般的な目的は、2つのファイルを比較し、比較を要約した第3のファイルを作成することです。ループ内の配列に項目を追加する

ipython

import numpy as np 

私の配列

aList1=np.array([['A','we'],['A','we'],['B','we'],['C','de']]) 
aList2=np.array([['A'],['B'],['D']]) 
aResult=np.array(['row1','occurence']) 

私の機能

def coverageA(array,file1,name1,colum1,file2,name2,colum2): 
    x=file1[1:,colum1] 
    y=file2[1:,colum2] 
    for f in x: 
     if f in y: 
      array=np.vstack((array,np.array([f,'shared']))) 
     else: 
      array=np.vstack((array,np.array([f,name1]))) 
    for f in y: 
     if f not in x: 
      array=np.vstack((array,np.array([f,name2]))) 
    return 

と、それを使用し、このよう

coverageA(aResult,alist1,'list1', 0,aList2,'list',0)

しかしのaResultが

print(aResult) output:(['row1','occurence'])

を変更していないが、修復

([['row1','occurence'],['A', 'shared'],['B', 'shared'],['C','list1'],['D','list2']])

答えて

1

を望んでいた:

import numpy as np 

#my arrays 

aList1=np.array([['A','we'],['A','we'],['B','we'],['C','de']]) 
aList2=np.array([['A'],['B'],['D']]) 
aResult=np.array(['row1','occurence']) 

#my function 

def coverageA(array,file1,name1,colum1,file2,name2,colum2): 
    x=file1[1:,colum1] 
    y=file2[1:,colum2] 
    for f in x: 
     if f in y: 
      array=np.vstack((array,np.array([f,'shared']))) 
     else: 
      array=np.vstack((array,np.array([f,name1]))) 
    for f in y: 
     if f not in x: 
      array=np.vstack((array,np.array([f,name2]))) 
    print(array) 
    return array 

#and use it this way 

aResult=coverageA(aResult,aList1,'list1', 0,aList2,'list2',0) 
#but aResult didn't change 

print(aResult) 
#output:(['row1','occurence']) 
#wanted 

#([['row1','occurence'],['A', 'shared'],['B', 'shared'],['C','list1'],['D','list2']]) 

説明は、Pythonの引数は代入によって渡されます。これはうまくいけばhereと説明されています。行array=np.vstack((array,np.array([f,'shared'])))では、新しい配列のメモリ(配列はこれを指す)に新しいnumpy配列が作成されますが、aResultは以前の位置を指しています。メモリのアドレスはprint(id(array))で確認できます。

関連する問題