2017-10-20 3 views
0

J'ai donc plusieurs fichiers .txt avec plus de 80 000 lignes de données. En tant que tel cela pourrait ne pas être beaucoup pour Python, cependant, j'ai besoin d'utiliser ces données dans R où j'ai besoin d'un certain paquet. Et là-bas, il faut environ 30 secondes pour charger un fichier - et j'ai 1200 de ces fichiers.Supprimer toutes les deux rangées de tableaux plusieurs fois

Cependant, les données dans ces fichiers sont plutôt denses. Il n'est pas nécessaire d'avoir de telles petites étapes, c'est-à-dire que je veux en supprimer pour rendre le fichier plus petit.

Ce que je me sers est maintenant comme suit:

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

Je fais commencer à l'index de la ligne 1, et supprimer toutes les deux rangées du tableau data_lines contenant les +80.000 lignes de données. Cependant, comme vous pouvez le voir, cela ne fait que réduire les lignes avec 1/2. Et j'ai probablement besoin d'au moins une réduction de 1/10. Donc, en principe, je pourrais probablement faire une sorte de boucle pour le faire, mais je me demandais s'il y avait une façon plus intelligente d'y parvenir?

+1

Avez-vous d'utiliser numpy ? Mettez-vous les données dans un ndarray numpy juste pour le décimer? Avez-vous essayé une tranche 'data_lines [:: 10]' ?? – wwii

Répondre

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

Traite chaque dixième ligne de données. Aucune donnée n'est copiée, le découpage fonctionne avec les objets de vue.

0

Vous devez utiliser le découpage en tranches. Dans mon exemple de tableau, les valeurs dans chaque ligne sont identiques à l'index de ligne (0,1, ..., 79999). J'ai découpé toutes les 10 lignes de mon tableau 80000 x 1 np (le nombre de colonnes n'a pas d'importance ... cela fonctionnerait sur un tableau avec plus d'une colonne). Si vous voulez couper différemment, voici plus d'informations sur le tranchage 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]]) 

Donc, dans votre cas, si votre tableau data_lines est pas déjà un tableau de np:

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