2014-02-14 4 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의 데이터를 설명 그래서 내가 x의 속성으로 y을 설정합니다 생각. 제 모국어는 MATLAB이고 구조체 계층 구조를 만드는 것과 비슷한 구문을 사용할 수 있다고 생각했습니다.

x.y = y 

이것은 불행하게도, 나는 내 문제에 대한 해결책을 찾기 위해 온라인을 찾기 위해 무엇을 알고 충분히 파이썬 용어를 모르는 작동하지 않습니다.

제안 사항이 있거나이 문제에 대한 설명이 있으면 알려주십시오.

+0

왜 우리에게 보여 않는 최소한의 * 전체 * 당신은 왜 당신이 만족스럽지 못한 현재의 접근 방식을 찾을 수 * *에 대해 몇 마디 현재 일을하고, 말을 무엇의 예? – NPE

+0

귀하의 질문 인 NPE를 이해할 수 없습니다. 불완전한 예제를 원하십니까? 데이터를 좀 더 사실적으로 만들 수는 있지만 위의 내용을 보면 내가 얻은 오류가 다시 발생합니다. –

+1

[this] (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 
당신은 myfunc2로부터 같이 할 수 있습니다 암시 unpack을 단지 목록 또는 배열과 같은 튜플의 개별 구성원에 액세스 할 수 tup[x] 표기법을 사용하거나 할 수

. 튜플은 함수를 통해 여러 항목을 이동하는 데 사용되는 꽤 표준적인 도구이지만 사용자가 많이 사용하는 경우 사용자 지정 클래스 나 다른 경우가있을 수 있습니다.

의견에서 말했듯이 배열을 다른 배열의 속성으로 만들고 싶다는 동기가 무엇인지는 분명하지 않지만 나에게 나쁜 생각처럼 보입니다. 서로 의존적 인 배열을 가지고 있다면 팬더 'array을 서브 클래스로 만들고 property을 추가 할 수 있습니다. 지나치게 복잡해 보입니다.

편집 : 이러한 것을 호출하십시오! 당신이 찾고 있던 무슨

arrs = (x, y) 
new_x, new_y = do_thing_with_arrays(arrs) 

희망이 일반적으로 변경됩니다

new_x = do_thing_with_array(x) 
new_y = do_thing_with_array(y) 

: 같은 코드는 아마 보인다.

+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)