2017-03-23 1 views
0

에서 데이터 검색 및 라벨이 나는 피클 다음과 같이 보이는 파일이하십시오 previous question에서파이썬 피클 파일

[array([[[148, 124, 115], 
     [150, 127, 116], 
     [154, 129, 121], 
     ..., 
     [159, 142, 133], 
     [159, 142, 133], 
     [161, 145, 142]], 

     [[165, 136, 145], 
     [176, 137, 141], 
     [178, 138, 144], 
     ..., 
     [199, 163, 171], 
     [202, 163, 167], 
     [200, 158, 163]]]), array([1, 1])] 

을, 우리는 따로을 수행하여 데이터와 레이블을 검색 할 수 있었다. 그러나, 내가 접근 할 때 많은 이미지가있을 때는 적합하지 않습니다.

다음과 같이 내 스크립트는 지금 보이는 : 나는 코드와 예를 들어 print 레이블을 실행할 때, 난 항상 1을 얻을

data, labels = [], [] 
    for i in range(0, 1): 

     filename = 'data.pickle' 
     batch_data = unpickle(filename) 
     if len(data) > 0: 
      data = np.vstack((data, batch_data[0][i])) 
      labels = np.hstack((labels, batch_data[1][i])) 
     else: 
      data = batch_data[0][0] 
      labels = batch_data[1][0] 

     data = data.astype(np.float32) 
     return data, labels 

, 내가 아니에요 (두 개의 레이블, [1 1]을 얻을 것으로 예상하는 동안 배열로 표시해야하는지 확인하십시오.)

여기서 내가 뭘 잘못하고 있니?

감사합니다.

답변

2

내가 레이블을 얻을 수있었습니다 :

In [37]: images = pickle_data[0] 

In [38]: labels = pickle_data[1] 

배열을 분해 당신이 그것을 기대하는 방식. 내가 사용

# Create batch data that represents what you are asking, I created three labels and data 
batch_data = np.array([[np.random.random((5,5)), np.random.random((5,5)), np.random.random((5,5))], np.array([1,1,1])]) 

#pickle the data 
import pickle 
pickle.dump(batch_data, open("test.pickle", "wb")) 

# create data and labels seperately 

def test_func(batch_data): 
    data, labels = [], [] 
    for i in range(0, batch_data.shape[1]): 
     if len(data) > 0: 
      data = np.vstack((data, batch_data[0][i])) 
      labels = np.hstack((labels, batch_data[1][i])) 
     else: 
      data = batch_data[0][0] 
      labels = batch_data[1][0] 
     data = data.astype(np.float32) 
    return data, labels 

# unpickle 
unpickled_batch_data = pickle.load(open("test.pickle", "rb")) 

# get stacked data and labels 
data, labels = test_func(unpickled_batch_data) 
print labels 

반환

[1 1 1] 
0

당신은 단지 두 번 zip을 사용하여 멀리 얻을 수 있습니다 : 이제 레이블과 데이터를 인덱스로 해당

In [25]: data, labels = zip(*zip(*pickle_data)) 

In [26]: data 
Out[26]: 
(array([[148, 124, 115], 
     [150, 127, 116], 
     [154, 129, 121], 
     [159, 142, 133], 
     [159, 142, 133], 
     [161, 145, 142]]), array([[165, 136, 145], 
     [176, 137, 141], 
     [178, 138, 144], 
     [199, 163, 171], 
     [202, 163, 167], 
     [200, 158, 163]])) 

In [27]: labels 
Out[27]: (1, 1) 

:

In [24]: pickle_data = [array([[[148, 124, 115], 
    ...:   [150, 127, 116], 
    ...:   [154, 129, 121], 
    ...:   [159, 142, 133], 
    ...:   [159, 142, 133], 
    ...:   [161, 145, 142]], 
    ...: 
    ...:  [[165, 136, 145], 
    ...:   [176, 137, 141], 
    ...:   [178, 138, 144], 
    ...:   [199, 163, 171], 
    ...:   [202, 163, 167], 
    ...:   [200, 158, 163]]]), array([1, 1])] 

또한 * 연산자 풀고 인수가 필요합니다 :

In [28]: data[0] 
Out[28]: 
array([[148, 124, 115], 
     [150, 127, 116], 
     [154, 129, 121], 
     [159, 142, 133], 
     [159, 142, 133], 
     [161, 145, 142]]) 

In [29]: data[1] 
Out[29]: 
array([[165, 136, 145], 
     [176, 137, 141], 
     [178, 138, 144], 
     [199, 163, 171], 
     [202, 163, 167], 
     [200, 158, 163]]) 

In [30]: labels[0] 
Out[30]: 1 

In [31]: labels[1] 
Out[31]: 1 

또는 더 나은 아직, 제 생각에는 y 우리의 이미지가 첫 번째 축을 따라 저장되고, 당신은 단지 지능형리스트를 사용하여 배열의 목록으로 배열을 분해 할 수

In [39]: images = [x for x in images] 

In [40]: images[0] 
Out[40]: 
array([[148, 124, 115], 
     [150, 127, 116], 
     [154, 129, 121], 
     [159, 142, 133], 
     [159, 142, 133], 
     [161, 145, 142]]) 

In [41]: images[1] 
Out[41]: 
array([[165, 136, 145], 
     [176, 137, 141], 
     [178, 138, 144], 
     [199, 163, 171], 
     [202, 163, 167], 
     [200, 158, 163]]) 

In [42]: labels[0] 
Out[42]: 1 

In [43]: labels[1] 
Out[43]: 1 

In [44]: labels 
Out[44]: array([1, 1]) 

In [45]: images 
Out[45]: 
[array([[148, 124, 115], 
     [150, 127, 116], 
     [154, 129, 121], 
     [159, 142, 133], 
     [159, 142, 133], 
     [161, 145, 142]]), array([[165, 136, 145], 
     [176, 137, 141], 
     [178, 138, 144], 
     [199, 163, 171], 
     [202, 163, 167], 
     [200, 158, 163]])] 

In [46]: 
관련 문제