Numpy нарезки питона 3 - PullRequest
       62

Numpy нарезки питона 3

0 голосов
/ 22 октября 2018

У меня есть 4 массива. Массив X : это двумерный массив, содержащий примеры (каждый имеет 3 функции):

X = array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18], [19, 20, 21]])

Массив Y содержит метки для примеров в Массив X :

Y = array([11, 44, 77, 22, 77, 22, 22])

Массивы L & R содержат подмножества меток

L = array([11, 44])
R = array([77, 22])

Я хочу нарезать оба X и Y в соответствии с метками в Lи R. Таким образом, вывод должен быть:

XL = array([[1, 2, 3], [4, 5, 6]])
XR = array([[7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18], [19, 20, 21]])
YL = array([11, 44])
YR = array([77, 22, 77, 22, 22])

Я знаю, что могу сделать что-то вроде следующего, чтобы извлечь строки, которые я хочу, основываясь на значении:

Y[Y==i]
X[Y[Y==i], :] 

Тем не менее, i здесь это значение, но в моем вопросе это другой массив (например, L и R). Я хочу эффективное решение в Python 3, чтобы сделать это.Есть намеки?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Использование np.isin:

import numpy as np

X = np.asarray([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18], [19, 20, 21]])
Y = np.asarray([11, 44, 77, 22, 77, 22, 22])

L = np.asarray([11, 44])
R = np.asarray([77, 22])

mask_L = np.isin(Y, L)
mask_R = np.isin(Y, R)

print(X[mask_L,:])  # output: array([[1, 2, 3], [4, 5, 6]])

print(X[mask_R,:])  # output: array([[ 7,  8,  9], [10, 11, 12], 13, 14, 15], 16, 17, 18], 19, 20, 21]])

print(Y[mask_L])  # output: array([11, 44])

print(Y[mask_R])  # output: array([77, 22, 77, 22, 22])
0 голосов
/ 22 октября 2018

Вот как вы обычно это делаете:

from numpy import array

X = array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18], [19, 20, 21]])
Y = array([11, 44, 77, 22, 77, 22, 22])

L = array([11, 44])
R = array([77, 22])

XL = array([x for x, y in zip(X, Y) if y in L])
XR = array([x for x, y in zip(X, Y) if y in R])
YL = array([y for y in Y if y in L])
YR = array([y for y in Y if y in R])

# Output
# XL = array([[1, 2, 3], [4, 5, 6]])
# XR = array([[7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18], [19, 20, 21]])
# YL = array([11, 44])
# YR = array([77, 22, 77, 22, 22])

Надеюсь, это поможет:)

...