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ď č. 1Pretož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]])