首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么+=不将变量的值相加?

为什么+=不将变量的值相加?
EN

Stack Overflow用户
提问于 2020-10-08 00:15:56
回答 2查看 66关注 0票数 1

我正在使用solve_ivp &推广的洛特卡-沃尔特拉方程来计算物种数量随时间的变化。在代码中,等式被分成两部分,如下所示:

代码语言:javascript
运行
复制
species = ['fox','rabbits','deer']

t = np.linspace(0, 10, 50)
first_ABC = solve_ivp(ecoNetwork, (0, 10), X0,  t_eval = t, args=(interactionStrength, growthRate), method = 'RK23')

def ecoNetwork(t, X, interactionStrength, growthRate):
    # define new array to return
    output_array = []
    # loop through all the species
    for outer_index, outer_species in enumerate(species): 
        # grab one set of growth rates at a time
        amount = growthRate[outer_species] * X[outer_index]
        for inner_index, inner_species in enumerate(species):
            # grab one set of interaction matrices at a time
            amount += (interactionStrength[outer_species][inner_species] * X[outer_index] * X[inner_index]) 
        # append values to output_array
        output_array.append(amount)
    # return array
    return output_array

然而,代码的"amount +=“部分并没有像预期的那样工作,而且似乎没有将等式的第二部分加到第一部分。如果我将行改为一个新的变量名,它就会起作用,例如

代码语言:javascript
运行
复制
amount2 = amount + (interactionStrength[outer_species][inner_species] * X[outer_index] * X[inner_index]) 

有人能解释一下为什么+=不工作吗?

X0和growthRates都是pandas数据帧,交互矩阵的格式如下:

代码语言:javascript
运行
复制
                fox   rabbit         deer 
fox          0.000000  -1           0.000000 
rabbit       1         0.000000     0.000000 
deer         0.000000  0.000000     0.000000 
EN

回答 2

Stack Overflow用户

发布于 2020-10-08 00:28:14

我真的不能说为什么+=不能工作,但它是一个特殊的运算符,必须在存储在amount中的特定数据类型的类中定义。

如果你这么说

代码语言:javascript
运行
复制
amount2 = amount + (interactionStrength[outer_species][inner_species] * X[outer_index] * X[inner_index]) 

工作,那么我会相信

代码语言:javascript
运行
复制
amount = amount + (interactionStrength[outer_species][inner_species] * X[outer_index] * X[inner_index]) 

会做你想做的事。

票数 1
EN

Stack Overflow用户

发布于 2020-10-08 00:30:01

Python变量存储对对象的引用,而不是它们的值。因此,要么需要使用另一个变量(如amount2),要么使用" copy“模块创建amount的浅层副本。(更干净的解决方案)

https://docs.python.org/2/library/copy.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64248164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档