2016-10-05 7 views
0

저는 라이브 스트리밍 데이터를 가져 와서 numpy 배열에 추가하는 Python 스크립트를 작업 중입니다. 그러나 4 개의 다른 배열을 하나씩 추가하면 하나씩 작동하는 것으로 나타났습니다. 예를 들어 : For 루프를 사용하여 Numpy에 추가하십시오.

openBidArray = np.append(openBidArray, bidPrice) 
highBidArray = np.append(highBidArray, bidPrice) 
lowBidArray = np.append(lowBidArray, bidPrice) 
closeBidArray = np.append(closeBidArray, bidPrice) 

는 나는 그것이 작동하지 않습니다 다음을 수행하지만 경우 그 이유에

arrays = ["openBidArray", "highBidArray", "lowBidArray", "closeBidArray"] 

for array in arrays: 
    array = np.append(array, bidPrice) 

어떤 생각을?

+0

루프의'array = ...'는 반복 변수를 재 할당하지만 소스리스트의 값은 변경하지 않습니다. 당신은'array [i] = ...'를하기 위해 인덱스 된 루핑을 사용해야한다. 이것이 기본적인 파이썬 루프 동작입니다. – hpaulj

답변

1

두 번째 예에서는 np.array 객체가 아니라 문자열을 사용합니다. 문자열에 숫자 (?)를 추가하려고합니다.

문자열 "openBidArray"에는 openBidArray이라는 배열에 대한 링크가 없습니다.

2

대신이 작업을 수행 :

arrays = [openBidArray, highBidArray, lowBidArray, closeBidArray] 

즉, 목록 배열의 목록이 아니라 우연히 사용자가 정의한 일이 배열의 이름을 포함하는 문자열 목록이어야합니다.

다음 문제는 np.append()은 추가가 아닌 항목이 추가 된 배열의 복사본을 반환한다는 것입니다. 이 결과를 array에 저장하지만 array에는 다음 반복에서 목록의 다음 항목이 할당되고 수정 된 배열은 손실됩니다 (물론 마지막 부분은 제외하고 array의 끝에 있습니다). 고리). 따라서 각 수정 된 배열을 목록에 다시 저장해야합니다. 이를 위해서는 슬롯이 무엇인지 알 필요가 있습니다.이 슬롯은 enumerate()을 사용하여 얻을 수 있습니다.

for i, array in enumerate(arrays): 
    arrays[i] = np.append(array, bidPrice) 

지금의 과정이 원래 변수 openBidArray 등을 업데이트하지 않습니다. 당신은 압축 풀기를 사용하여 루프 후이 작업을 수행 할 수 있습니다 :
openBidArray, highBidArray, lowBidArray, closeBidArray = arrays 

그러나 어떤 점에서 그것은 단지 시작하는 (당신이 이름에 액세스해야하는 경우 또는 사전) 목록의 배열을 저장할 더 의미

및 별도의 변수를 사용하지 마십시오.

N.B. NumPy 배열 대신 여기에 정규 파이썬 목록을 사용했다면 이러한 문제 중 일부는 사라질 것입니다. append()은 목록에서 작동하기 때문에 수정 된 배열을 다시 목록에 저장하거나 개별 변수에 압축을 풀 필요가 없습니다. 목록에 모든 추가 작업을 수행 한 다음 나중에 NumPy 기능이 필요한 경우 배열로 변환 할 수도 있습니다.

+0

감사합니다. 나는 왜 문자열을 사용했는지 모르겠습니다. 그러나 나는 그것들을 배열 이름으로 대체하고 계속 for 루프를 돌렸다. 그러나 for 루프의'array' 단어를 배열 이름으로 바꾸면'closeBidArray'와 같이 잘 작동합니다. 레코드의 경우 for 루프는 클래스 내부의 함수 안에 있고 배열은 클래스 외부에서 선언됩니다. – ng150716

+0

이 문제에 대한 추가 정보로 질문을 업데이트했습니다. – kindall

관련 문제