Изменить определенные столбцы в нули - PullRequest
0 голосов
/ 17 мая 2018

У меня очень большой набор данных XposMay (125 800 000). Чтобы было проще, я сделал уменьшенную версию ниже. Я хочу увидеть, какие значения в SomAprilMay меньше 3 и удалить соответствующие столбцы в ноль. Это мой код ниже, который ничего не меняет на нули.

SomAprilMay=[0,0,0,1,0,1,2,3,4,15,12,14,1,10]
XposMay=[[50,51,52,53,54,55,56,57,58,59,60,61,62,63],
         [50,51,52,53,54,55,56,57,58,59,60,61,62,63],
         [50,51,52,53,54,55,56,57,58,59,60,61,62,63]]
Xpos1May=XposMay
a=[]
b=[]
for k in range (0,len(SomAprilMay)):
    if SomAprilMay[k] < 3:
        a.append(SomAprilMay[k])
        b.append(k)
for m in range (0,len(XposMay)):
       Xpos1May[:][b[m]]=0

Поскольку первые 7 и последний элемент SomAprilMay <3, требуемый результат: </p>

Xpos1May = [[0,0,0,0,0,0,0,57,58,59,60,61,62,0],
            [0,0,0,0,0,0,0,57,58,59,60,61,62,0],
            [0,0,0,0,0,0,0,57,58,59,60,61,62,0]]

Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Ваш SomAprilMay имеет 13 элементов, поэтому я добавил один.

Вот один вкладыш:

SomAprilMay=[0,0,0,1,0,1,2,3,4,5,15,12,14,1]

XposMay=[[50,51,52,53,54,55,56,57,58,59,60,61,62,63],
         [50,51,52,53,54,55,56,57,58,59,60,61,62,63],
         [50,51,52,53,54,55,56,57,58,59,60,61,62,63]]

mask = [e < 3 for e in SomAprilMay]

Xpos1May = [[0 if mask[i] else item for i, item in enumerate(sub) ] for sub in XposMay]
0 голосов
/ 17 мая 2018

Я бы предложил использовать для этой задачи массивы numpy, так как это быстрее, чем проходить через все это. Однако размеры списков SomAprilMay и XposMay не равны, поэтому я предположил, что вы сделали там опечатку и добавили еще 14 перед финальным 1. Этот код

import numpy as np
SomAprilMay=np.array([0,0,0,1,0,1,2,3,4,15,12,14,14,1])
XposMay=np.array([[50,51,52,53,54,55,56,57,58,59,60,61,62,63],
         [50,51,52,53,54,55,56,57,58,59,60,61,62,63],
         [50,51,52,53,54,55,56,57,58,59,60,61,62,63]])
XposMay.T[SomAprilMay < 3] = 0
XposMay

затем дает требуемый

array([[ 0,  0,  0,  0,  0,  0,  0, 57, 58, 59, 60, 61, 62,  0],
       [ 0,  0,  0,  0,  0,  0,  0, 57, 58, 59, 60, 61, 62,  0],
       [ 0,  0,  0,  0,  0,  0,  0, 57, 58, 59, 60, 61, 62,  0]])
...