/ / Ako extrahovať všetky stĺpce okrem jedného z poľa (alebo matice) v pythone? - pytón, polia, numpy, matica

Ako extrahovať všetky stĺpce, ale jeden z poľa (alebo matrix) v Pythone?-python, polia, numpy matice

Vzhľadom na početné 2d pole (alebo maticu) by som chcel extrahovať všetky stĺpce okrem i-tého.

Napr. od

1 2 3 4
2 4 6 8
3 6 9 12

Chcela by som mať napr.

1 2 3
2 4 6
3 6 9

alebo

1 2 4
2 4 8
3 6 12

Nemôžem nájsť pythonický spôsob, ako to urobiť. Teraz už môžete dané stĺpce jednoducho extrahovať

a[:,n]

alebo

a[:,[n,n+1,n+5]]

Ale čo tak vyťažiť všetky okrem jednej?

odpovede:

14 pre odpoveď č. 1

Pretože pre všeobecný prípad budete aj tak vracať kópiu, môžete zistiť, že pomocou aplikácie vyrábate čitateľnejší kód np.delete:

>>> a = np.arange(12).reshape(3, 4)
>>> np.delete(a, 2, axis=1)
array([[ 0,  1,  3],
[ 4,  5,  7],
[ 8,  9, 11]])

17 pre odpoveď č. 2

Použite rez, ktorý vylučuje posledný prvok.

In [19]: a[:,:-1]
Out[19]:
array([[1, 2, 3],
[2, 4, 6],
[3, 6, 9]])

Ak chcete niečo iné ako posledný prvok, stačí vytvoriť zoznam, pomocou ktorého môžete vybrať.

In [20]: selector = [x for x in range(a.shape[1]) if x != 2]
In [21]: a[:, selector]
Out[21]:
array([[ 1,  2,  4],
[ 2,  4,  8],
[ 3,  6, 12]])

http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html


5 pre odpoveď č. 3

Zoznámte sa s numpy pokročilé krájanie

>>> import numpy as np
>>> a = np.array([[1,2,3,4], [2,4,6,8], [3,6,9,12]])
>>> a[:,np.array([True, True, False, True])]
array([[ 1,  2,  4],
[ 2,  4,  8],
[ 3,  6, 12]])

0 pre odpoveď č. 4

Už uvedené odpovede možno ľahko prispôsobiť výberu všetkých stĺpcov okrem zoznamu, ale uvádzame niekoľko explicitných príkladov:

In [1]: import numpy as np
In [2]: a = np.arange(12).reshape(3, 4)
In [3]: a
Out[3]:
array([[ 0,  1,  2,  3],
[ 4,  5,  6,  7],
[ 8,  9, 10, 11]])
In [4]: drop_cols = [0, 3]

# option 1: delete the columns you don"t want (like @Jaime)
# (this is really the most straightforward)

In [5]: np.delete(a, drop_cols, axis=1)
Out[5]:
array([[ 1,  2],
[ 5,  6],
[ 9, 10]])

# option 2: pass the indices of columns to keep (like @chrisb)

In [6]: a[:, [i for i in range(a.shape[1]) if i not in drop_cols]]
Out[6]:
array([[ 1,  2],
[ 5,  6],
[ 9, 10]])

# option 3: use an array of T/F for each col (like @Peter Gibson)

In [7]: a[:, [i not in drop_cols for i in range(a.shape[1])]]
Out[7]:
array([[ 1,  2],
[ 5,  6],
[ 9, 10]])