Подача нескольких значений в функцию из массива, но только для одного аргумента - PullRequest
0 голосов
/ 01 мая 2020

Это немного новый вопрос ie, на который, я уверен, где-то уже был дан ответ, но, к сожалению, я нигде не смог его найти.

У меня есть функция findDX, которая требует в массиве Nx2 numpy, D и единственном числе с плавающей точкой X (определение приведено ниже). Я хочу оценить эту функцию на фиксированном D с несколькими значениями X, то есть find_DX(D, 1), find_DX(D, 2), find_DX(D, 3), где массив X входов равен [1,2,3]

Есть ли способ передать несколько значений X, сохраняя D фиксированным (кроме изменения определения функции)? Я пытался

find_DX([mcm],[1,2,3])

, но это, как и ожидалось, дает ValueError: operands could not be broadcast together with shapes

def find_DX(D, X):
    """
    Parameters
    ----------
    D : numpy array
        Input cumulative DVH.
    X : Float
       We're finding the dose recieved by at least X% of tissues.

    Returns
    -------
    DX

    """
    idx = (np.abs(D[:,1] - X)).argmin()
    return D[idx,0]

РЕДАКТИРОВАТЬ: я только что написал для него oop. Я надеялся избежать этого, но это делает работу. Я разместил свою новую функцию ниже, если кто-то хочет ее использовать:

def find_DX(cDVH, X_values):
    """
    Parameters
    ----------
    cDVH : numpy array
        Input array
    X : numpy array
       Values of X to evaluate.

    """
    X_values=np.float64(X_values) #force to float
    Out=np.zeros_like(X_values)
    for i in range(0,len(X_values)):
        idx = np.abs(cDVH[:,1] - X_values[i]).argmin()
        Out[i]=cDVH[idx,0]

    return tuple(Out)

1 Ответ

1 голос
/ 01 мая 2020

Вы можете попробовать это,

import numpy as np

def find_DX(D, X):
    """
    Parameters
    ----------
    D : numpy array
        Input cumulative DVH.
    X : Float
       We're finding the dose recieved by at least X% of tissues.

    Returns
    -------
    DX

    """
    tmpArr=[]
    for i in X:
        idx = (np.abs(D[:,1] - i)).argmin()
        tmpArr.append(idx)
    return tmpArr

a = [[1,2],[2,3]]   #sample array
a= np.array(a)

print(find_DX(a,[1,2,3]))
...