Muszę jeszcze dostać głowy wokół odwołuje się do array.

Mam tablice, w których pierwsze 2 kolumny zawsze będą miały pewne ujemne wartości, które są konieczne, a pozostałe kolumny muszą mieć ich wartości ujemne podstawione 0s. Rozumiem, że istnieje różne sposoby Aby zrobić to. Część, która mnie zmierzała jest jak łączyć jedną z tych metod, tylko z robieniem go tylko dla kolumn po drugiej stronie 2.

Przykładowa tablica:

[[x, y, flow, element1, element2, element3] [x, y, flow, element1, element2, element3] [x, y, flow, element1, element2, element3]]

Pożądany rezultat byłby to, że dla całej tablicy, którekolwiek z wartości, które są ujemne, są wymieniane 0, chyba że są x lub y.

3
mauve 15 sierpień 2014, 22:52

2 odpowiedzi

Najlepsza odpowiedź

Musisz clip podzbiorów tablic.

Coś takiego:

a[2:].clip(0, None)

Możesz zrobić to kilka sposobów. Jeden byłby w pętli:

for list in list_of_lists:
    list[2:] = list[2:].clip(0, None)

Lub, używając [:, 2:], który odnosi się do listy list ({x1}}), a następnie wszystkich sublazistów (2:).

Wynik jest zasadniczo jaki sugerował Joe Kingston:

list[:, 2:] = list[:, 2:].clip(0, None)
3
Luke 15 sierpień 2014, 19:04

To brzmi jak chcesz:

subset = array[:, 2:]
subset[subset < 0] = 0

Lub jako raczej nieczytelny jednoskładnikowy:

array[:, 2:][array[:, 2:] < 0] = 0

Jako bardziej kompletny przykład:

import numpy as np

array = np.random.normal(0, 1, (10, 5))
print array

# Note that "subset" is a view, so modifying it modifies "array"
subset = array[:, 2:]
subset[subset < 0] = 0

print array
4
Joe Kington 15 sierpień 2014, 18:55