2016-07-01 36 views
1

想想看,我有一個ndarray重建的ndarray:numpy的 - 逐步通過過濾unneded成員

all_data.shape 
(220000, 28, 28) 

type(all_data) 
numpy.ndarray 

我想去在這個陣列中的每個成員,並篩選出那些我不想要的。因此,我想獲得完全相同形狀的新ndarray。

喜歡的東西:

#save first image and its label in separate array 
#we will store unique values 
sanitized_data = all_data[0] 
sanitized_labels = all_labels[0] 
#lets illimnate dupes 
#store of existing hashes 
hashes = set() 
#go over each image 
for i in range(0,len(all_labels)): 
    #check if its hash is in list hashes 
    if not md5(all_data[i]).hexdigest() in hashes: 
     #record its hash and copy to new dataset 
     sanitized_data = np.stack((sanitized_data, all_data[i])) 
     sanitized_labels = np.stack((sanitized_labels, all_labels[i]))  
     hashes.add(md5(all_data[i]).hexdigest()) 

,但我得到:

ValueError: all input arrays must have the same shape 

我不知道如何正確地做到這一點。一旦找到我喜歡的數組,我想逐漸沿第一軸添加新數組。不知道如何正確地做到這一點與numpy?我爲此搜索了dstack動作,但看起來像是沿着錯誤的軸線疊加了東西。

+0

「過濾掉」是什麼意思?設置爲0,或刪除。如果刪除元素,則無法保留相同的形狀。 – hpaulj

+0

我可以建議在Python會話中拉起numpy,製作一些具有各種形狀的小陣列,並練習將它們沿不同的軸進行連接。 'np.concatenate'是基本動作。 'hstack','dstack'等只是調整一些軸的尺寸和concatatenate。不要在黑暗中徘徊。用小而可觀的東西練習。 – hpaulj

+1

最好在列表中累積組件數組,並將'concatenate'一次應用於整個列表。當你走的時候也要進入習慣檢查維度。 – hpaulj

回答

1

從評論複製:

這是更好地聚集在一個列表組件陣列,一旦申請concatenate整個列表。當你走的時候也要進入習慣檢查維度。

@hpaulj最後的建議工作,謝謝!