Python 在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) ... 这似乎不美观,因为如果我能让它们成为同一个对象的一部分,那么这些函数就只有一个输入和输出。如果可能的话,我只想让我的代码更简单

当您通读这个问题时,您将看到我是Python和NumPy新手,所以请原谅任何不正确的术语

我目前正在使用两个NumPy数组,我们称它们为
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代码。我的主要动机是通过让更少的变量在我的工作区中浮动,并将更少的变量传递给我的函数来获得更优雅的代码。