多次删除每隔一行数组

时间:2017-10-20 17:59:09

标签: python numpy

所以我有几个包含超过+80.000行数据的.txt文件。 因此,对于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。所以原则上我可能只是做一些循环来做到这一点,但我想知道是否有更聪明的方法来实现它?

2 个答案:

答案 0 :(得分:1)

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

每隔十行获取一次数据。没有数据被复制,切片适用于视图对象。

答案 1 :(得分: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]