Есть ли способ объединить два массива numpy, сохранив только наибольшее расстояние от третьего массива? - PullRequest
0 голосов
/ 29 апреля 2020

Я не нашел хорошего способа сделать это.

Скажем, у меня есть 3 массива

Base = [1,2,3]
A = [1,4,-5]
B = [3,-2,4]

Я хочу объединить A и B так, чтобы только наибольшее расстояние от базы хранится. Ie, результат будет

C = [2,-4,-8]

Я уверен, что есть способ сделать это с numpy, я просто не смог его найти. Заранее благодарю, если можете помочь (:

Ответы [ 2 ]

2 голосов
/ 29 апреля 2020

Вы упомянули массивы, поэтому идете с ними и, следовательно, NumPy путь с np.where -

# Inputs
In [42]: Base = np.array([1,2,3])
    ...: A = np.array([1,4,-5])
    ...: B = np.array([3,-2,4])

In [43]: dA,dB = A-Base, B-Base

In [45]: np.where(np.abs(dA)>np.abs(dB), dA, dB)
Out[45]: array([ 2, -4, -8])
1 голос
/ 29 апреля 2020

Использование numpy .argmax :

import numpy as np

Base = np.array([1,2,3])
A = np.array([1,4,-5])
B = np.array([3,-2,4])

T = np.vstack([A,B])
ids = np.argmax(np.abs(T-Base), axis=0)

C = (T-Base)[ids, np.arange(T.shape[1])]
C
array([ 2, -4, -8])
...