Python 在Numpy数组中设置新属性
当您通读这个问题时,您将看到我是Python和NumPy新手,所以请原谅任何不正确的术语 我目前正在使用两个NumPy数组,我们称它们为Python 在Numpy数组中设置新属性,python,arrays,numpy,properties,set,Python,Arrays,Numpy,Properties,Set,当您通读这个问题时,您将看到我是Python和NumPy新手,所以请原谅任何不正确的术语 我目前正在使用两个NumPy数组,我们称它们为x和y x = numpy.array(0) y = numpy.array(0) 我使用这些数组作为输入和输出的函数操作这些数组 x, y = function1(x, y) x, y = function2(x, y) ... 这似乎不美观,因为如果我能让它们成为同一个对象的一部分,那么这些函数就只有一个输入和输出。如果可能的话,我只想让我的代码更简单
x
和y
x = numpy.array(0)
y = numpy.array(0)
我使用这些数组作为输入和输出的函数操作这些数组
x, y = function1(x, y)
x, y = function2(x, y)
...
这似乎不美观,因为如果我能让它们成为同一个对象的一部分,那么这些函数就只有一个输入和输出。如果可能的话,我只想让我的代码更简单
x = function1(x)
x = function2(x)
...
事实证明,y
描述了x
中的数据(不是在这个玩具示例中,而是用我的实际数组),所以我想我应该将y
设置为x
的一个属性。我的母语是MATLAB,我想我可以使用类似于创建结构层次结构的语法
x.y = y
这不起作用,不幸的是,我不知道足够多的Python术语,不知道在线查找什么来找到问题的解决方案
如果您有任何建议和/或我是否可以对此问题提供任何澄清,请告诉我。我假设您遇到的错误与
'array'对象没有属性“y”有关。
在这种情况下,如果您真的只想将这些东西捆绑在一起,我建议使用tuple。以下是它们如何在您的用例中工作的一些示例:
def myFunc1(x, y):
# do stuff with x and y
return ??? # x or y or... both, somehow?
def myFunc2(xy_bundle): # where xy_bundle is x and y packed into a tuple!
x, y = xy_bundle # or: x = xy_bundle[0]; y = xy_bundle[1];
# do stuff with x and y
return (x, y) # syntax for creating a tuple inline
您可以使用tup[x]
表示法访问元组的各个成员,就像列表或数组一样,也可以隐式解压缩它们,如myFunc2中所示。元组是通过函数移动多个对象的标准工具,不过如果您发现自己经常使用它们,可能需要自定义类或其他东西
正如在评论中所说的,不清楚您想要将一个数组作为另一个数组的属性的动机是什么,但对我来说这似乎是个坏主意。如果您有相互依赖的数组,您肯定可以将pandas的数组
子类化,并向其中添加属性
。但似乎过于复杂了
编辑:调用这些东西!您的代码可能如下所示:
new_x = do_thing_with_array(x)
new_y = do_thing_with_array(y)
这通常会变为:
arrs = (x, y)
new_x, new_y = do_thing_with_arrays(arrs)
希望这就是你想要的 您可以像这样创建一个包含两个数组的简单类
class Xy(object):
def __init__(self, x, y):
self.x = x
self.y = y
import numpy as np
x = np.array(range(10))
y = np.array(range(10))
xy = Xy(x,y)
def square(xy):
x = xy.x
y = xy.y
x **= 2
y **= 2
return Xy(x,y)
为什么你要给我们展示一个你目前正在做的最简单的完整的例子,并说几句为什么你觉得目前的方法不令人满意?我不理解你的问题,NPE。你想要一个不完整的例子吗?我可以使数据更真实,但您上面看到的将回答我得到的错误。请看,我认为如果不对numpy数组进行子类化,就无法做到这一点。我不确定您为什么要这样做,示例不清楚您为什么要将y添加为x的属性。这在熊猫数据结构中是允许的。我完全不清楚你的动机。我希望一个最小但有意义的例子能对你的想法有所启发,使我们能够更好地帮助你。谢谢,p!我将不得不研究自定义类,这些类已经存在,比如NumPy数组。否则,我将试用你提到的捆绑包。只是好奇,为什么这对你来说是个坏主意?试图理解如何编写更好的Python代码。我的主要动机是通过让更少的变量在我的工作区中浮动,并将更少的变量传递给我的函数来获得更优雅的代码。