2017-10-20 56 views
0

因此,我有幾個.txt文件,其中有超過+80.000行的數據。 然而,對於Python來說,這可能不是太多,所以我需要在R中使用這些數據,我需要某個包。在那裏加載一個文件需要大約30秒 - 而且我有1200個這樣的文件。多次刪除陣列的每第二行

但是,這些文件中的數據相當密集。沒有必要有這麼小的步驟,即我想刪除一些文件,以使文件變小。

我現在使用如下:

np.delete(np.array(data_lines), np.arange(1, np.array(data_lines).size, 2)) 

我使它開始行索引1處,以及移除包含80.000線數據的data_lines陣列的每隔一行。但是,正如您所看到的,這隻會減少1/2的行。我可能至少需要1/10減少。所以原則上我可能只是做一些循環來做到這一點,但我想知道是否有一個更聰明的方法來實現它?

+1

你必須使用numpy的?你是否將數據放入了一個numpy的ndarray中以減少它的影響?你有沒有嘗試過一個切片'data_lines [:: 10]'? – wwii

回答

1
a = np.array(data_lines)[::10] 

需要每隔十行數據。沒有數據被複制,切片與視圖對象一起工作。

0

您應該使用切片。在我的示例數組中,每行中的值與行索引(0,1,...,79999)相同。我把我的80000 x 1 np數組中的每10行剪出來(列的數量並不重要......這可以在具有多於1列的數組上工作)。如果你想以不同的方式切它,這裏有更多信息的切片https://docs.scipy.org/doc/numpy-1.13.0/reference/arrays.indexing.html

import numpy as np 


data_lines = np.arange(0,80000).reshape((80000,1)) 

# 
data_lines = data_lines.reshape((80000,1)) 
data_lines_subset = data_lines[::10] 

##data_lines_subset 
## array([[ 0], 
    # [ 10], 
    # [ 20], 
    #  ..., 
    # [79970], 
    # [79980], 
    # [79990]]) 
你的情況

因此,如果您data_lines陣列是不是已經是一個NP陣列:

data_lines_subset = np.array(data_lines)[::10]