Python 向循环中的数组添加项
我尝试在循环中向numpy.array添加一行,但它不起作用,尽管我没有收到任何错误。我的总体目标是比较两个文件,并创建第三个文件来总结比较Python 向循环中的数组添加项,python,arrays,numpy,Python,Arrays,Numpy,我尝试在循环中向numpy.array添加一行,但它不起作用,尽管我没有收到任何错误。我的总体目标是比较两个文件,并创建第三个文件来总结比较 ipython import numpy as np 我的数组 我的职能 这样使用它 coverage(aResult,alist1,'list1',0,aList2,'list',0) 但结果没有改变 打印(aResult) 输出:(['row1','occurrence']) 受通缉的 (['row1','occurrence'],['A','sha
ipython
import numpy as np
我的数组
我的职能
这样使用它
coverage(aResult,alist1,'list1',0,aList2,'list',0)
但结果没有改变
打印(aResult)
输出:(['row1','occurrence'])
受通缉的
(['row1','occurrence'],['A','shared'],['B','shared'],['C','list1'],['D','list2'])
已修复:
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中,参数是通过赋值传递的,这一点解释得很好。在行array=np.vstack((array,np.array([f,'shared']))
中,一个新的numpy数组在一个新的位置im内存中创建(数组指向此位置),但结果仍然指向它的旧位置。您可以使用打印(id(数组))
检查内存地址
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
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']])