2014-02-14 46 views
0

当您通读此问题时,您会看到我是Python和NumPy的新手,因此请原谅任何不正确的术语。在Numpy数组中设置新属性

我目前正在使用两个NumPy阵列,我们称它们为xy

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数据(而不是在这个玩具的例子,但我的实际阵列),所以我想我会设置yx属性。我的母语是MATLAB,我想我可以使用类似于创建结构层次结构的语法。

x.y = y 

这不起作用,不幸的是,我不知道足够的Python术语知道要寻找什么,在网上找到一个解决我的问题。

请让我知道,如果您有任何建议和/或如果我可以提供任何关于这个问题的澄清。

+0

为什么你告诉我们,一个最小的*完整*例如,你在做什么目前,说几句话*为什么*您觉得目前的做法不满意? – NPE

+0

我不明白你的问题,NPE。你想要一个不完整的例子?我可以使数据更真实,但是你上面看到的将会重现我得到的错误。 –

+1

看到[这](http://stackoverflow.com/questions/1529002/cant-set-attributes-of-object-class)我不认为这可以完成没有子类化numpy数组。 – M4rtini

回答

1

我认为你得到的错误是沿着'array' object has no attribute 'y'的线。

在这种情况下,如果你真的想把这些东西捆绑在一起,我建议使用一个元组。这里是他们是如何为您的使用情况下,工作的一些例子:

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]符号来访问元组的各个成员,就像一个列表或数组,或者你可以隐unpack它们,如myfunc2所。元组是用于通过函数移动多个事物的非常标准的工具,但是如果您发现自己使用了很多元素,那么您可能会遇到自定义类或其他类的情况。

正如在评论中所说的,目前还不清楚你想将数组作为另一个数组的属性的动机,但对我来说这似乎是个坏主意。如果你有相互依赖的数组,你可以将大熊猫'array分类并添加一个property。但似乎过于复杂。

编辑:调用这些东西!您的代码可能看起来像:

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) 

希望这就是你要找的人。

+0

谢谢,p!我将不得不查看已有的类如NumPy数组的自定义类。否则,我会尝试你提到的捆绑包。只是好奇,为什么这对你来说似乎不是个好主意?试图了解如何编写更好的Python代码。我的主要动机是让更少的变量浮在我的工作区周围,并将更少的变量传递给我的函数,从而获得更优雅的代码。 –

1

你可以创建一个简单的类来保存这样的数组。

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)