Чтение части массива Numpy - PullRequest
0 голосов
/ 30 апреля 2020

Предположим, у меня есть следующий набор данных как массив numpy:

import numpy as np

x = np.array([0, 5, 10, 15, 20, 25, 30])

y = np.array([0, 0.13157895, 0.31578947, 0.40789474, 0.46052632, 0.5, 0.53947368])

, и я хочу читать только значения, соответствующие x = 20, 25, 30. Как я могу прочитать это, используя numpy?

Ответы [ 5 ]

1 голос
/ 30 апреля 2020

Мы можем фильтровать y, используя zip и list comprehension.

np.array([v for i, v in zip(x, y) if i in [20, 25, 30]])
#array([0.46052632, 0.5       , 0.53947368])

Альтернатива с pandas.

import pandas as pd
pd.Series(index=x, data=y).loc[[20, 25, 30]].values
1 голос
/ 30 апреля 2020

numpy.searchsorted может выполнить работу:

idx = np.searchsorted(x,[20,25,30]) 
part = y[idx]

Обратите внимание, что x необходимо отсортировать. Если x не отсортировано, попробуйте:

idx_sort = np.argsort(x)

xsorted = x[idx_sort]
ysorted = y[idx_sort]

idx = np.searchsorted(xsorted, [20,25,30])
part = y[idx]
1 голос
/ 30 апреля 2020

этот код сделает это:

import numpy as np

ind = [np.where(x == num)[0] for num in [20, 25, 30]]
corresponding = y[ind]

я думаю, что объяснять не нужно, но если вам что-то нужно, прокомментируйте, пожалуйста

0 голосов
/ 30 апреля 2020

Альтернатива с использованием numpy .any для создания логической маски:

import numpy as np

x = np.array([0, 5, 10, 15, 20, 25, 30])
y = np.array([0, 0.13157895, 0.31578947, 0.40789474, 0.46052632, 0.5, 0.53947368])

values = [20,25,30]
m = np.any([x==v for v in values], axis=0)

y[m]
array([0.46052632, 0.5       , 0.53947368])
0 голосов
/ 30 апреля 2020

Не с numpy, а с требованием:

import numpy as np

x = np.array([0, 5, 10, 15, 20, 25, 30])
y = np.array([0, 0.13157895, 0.31578947, 0.40789474, 0.46052632, 0.5, 0.53947368])

xy_dict = {}

for j, k in zip(x, y):
    xy_dict[j] = k

print(xy_dict)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...