Это немного новый вопрос 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)