gpt4 book ai didi

python - 类内的 Numpy 数组赋值

转载 作者:太空宇宙 更新时间:2023-11-03 14:28:03 27 4
gpt4 key购买 nike

我正在使用 Python 3.2.3 和 NumPy 1.6.1。如果有人能解释一下当我尝试访问(以两种不同的方式)NumPy 数组的元素时 NumPy 做了什么,我将不胜感激。

代码:

import numpy as np

class MyClass:

def __init__(self,q):
self.coord = q
self.firstel = q[0]
self.secondel = q[1:2]

q = np.array([10,20]) # numpy array
my_object = MyClass(q) # object of MyClass

print('original','q:',q,' / coord:',my_object.coord,' / 2elements:',my_object.firstel,my_object.secondel])

q[0],q[1] = 30,40 # modification of the elements of q

print('modified','q:',q,' / coord:',my_object.coord,' / elements:', my_object.firstel, my_object.secondel])

q 是一个 numpy 数组,我将其作为参数传递给 MyClass。我将它存储在类中名为 coord 的变量中。然后我在类中以两种不同的方式访问 q 的第一个和第二个元素。

当我运行上面的代码时,我得到了这个:

original q: [10 20]  / coord: [10 20]  / elements: [10, array([20])]
modified q: [30 40] / coord: [30 40] / elements: [10, array([40])]

q 改变时,变量 firstel 不更新 但变量 secondel .

q[0]q[1:2] 发生了什么?

谢谢

最佳答案

firstel 变量是一个(不可变的),因此永远不会更新:

self.firstel = q[0]  # and stays this value once and for all

虽然 secontel 变量是原始数组的 View ,因此将被更新:

self.secondel = q[1:2]

.

解决这个问题的一种方法是使 firstel 成为一个方法:

def firstel(self):
return self.q[0]

这可能使您的类(class)中 firstel 和 secondel意图变得更清楚。

关于python - 类内的 Numpy 数组赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16899764/

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