在Numpy数组中设置新属性

时间:2014-02-14 21:23:26

标签: python arrays numpy properties set

当你阅读这个问题时,你会发现我是Python和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中的数据(不是在这个玩具示例中,而是我的实际数组)所以我想我会将y设置为x。我的母语是MATLAB,我想我可以使用类似于创建结构层次结构的语法。

x.y = y

这不起作用,不幸的是,我不知道足够的Python术语来了解在线寻找什么解决方案。

如果您有任何建议和/或我是否可以就此问题提供任何说明,请与我们联系。

2 个答案:

答案 0 :(得分: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)

希望这是你想要的。

答案 1 :(得分: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)