gpt4 book ai didi

python - 在循环中将项目添加到数组

转载 作者:太空宇宙 更新时间:2023-11-04 05:18:50 24 4
gpt4 key购买 nike

我尝试在循环中向 numpy.array 添加一行,但它不起作用,尽管我没有收到任何错误。我的总体目标是比较两个文件并创建第三个文件来总结比较。

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没有改变

打印(结果)输出:(['row1','occurence'])

想要

([['row1','occurence'],['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 中参数是通过赋值传递的,解释得很好 here .在 array=np.vstack((array,np.array([f,'shared']))) 行中,一个新的 numpy 数组被创建在一个新的 im 内存位置(数组指向这个), 但 aResult 仍然指向它的旧位置。您可以使用 print(id(array)) 检查内存地址。

关于python - 在循环中将项目添加到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40996850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com