У меня есть 2 массива разных размеров m
и n
, например:
x = np.asarray([100, 200])
y = np.asarray([300, 400, 500])
У меня также есть целочисленный массив размером m+n
, например:
indices = np.asarray([1, 1, 0, 1 , 0])
Я хотел бы объединить x
и y
в массив z
размера m+n
, в этом случае:
expected_z = np.asarray([300, 400, 100, 500, 200])
Подробно:
- 1-е значение
indices
равно 1, поэтому 1-е значениеz
должно быть изy
. Поэтому300
. - Второе значение
indices
равно 1, поэтому второе значениеz
также должно быть изy
. Поэтому400
- Третье значение
indices
равно 0, поэтому третье значениеz
должно быть на этот раз отx
. Поэтому100
- ...
Как я могу сделать это эффективно в NumPy?
Заранее спасибо!
3 ответа
Создайте выходной массив и используйте логическое индексирование, чтобы назначить x
и y
в правильные слоты вывода:
z = numpy.empty(len(x)+len(y), dtype=x.dtype)
z[indices==0] = x
z[indices==1] = y
Надеюсь, это может вам помочь:
x = np.asarray([100, 200])
y = np.asarray([300, 400, 500])
indices = np.asarray([1, 1, 0, 1 , 0])
expected_z = np.asarray([])
x_indice = 0
y_indice = 0
for i in range(0,len(indices)):
if indices[i] == 0:
expected_z = np.insert(expected_z,i,x[x_indice])
x_indice += 1
else:
expected_z = np.insert(expected_z,i,y[y_indice])
y_indice += 1
expected_z
И вывод:
output : array([300., 400., 100., 500., 200.])
Постскриптум всегда проверяйте, что len(indices) == len(x) + len(y)
и:
- значения, которые приходят от y == len (y)
- значения, которые приходят из х == len (x)
out
будет вашим желаемым результатом:
out = indices.copy()
out[np.where(indices==0)[0]] = x
out[np.where(indices==1)[0]] = y
Или, как предложено выше, просто сделайте:
out = indices.copy()
out[indices==0] = x
out[indices==1] = y
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.