2014-01-23 3 views
1

У меня есть массив, который говорит «x» из 100 значений в диапазоне от 0 до 9. Я должен использовать этот «x» в формуле для нахождения компонента «сигма». Но есть три условия для нахождения «сигмы», которые, а х < 1, сигма = формула, а х = 1, сигма = формула и а х> 1, сигма = формулаУсловие в массиве, Python

мне нужно для написания кода Python, который принимает все значения x < 1 и применяет его к «sigma», и все значения x = 1 и т. д. и применяют его к «sigma» для получения «Сигма» массив такой же длины, то есть 100 значений

Как это сделать?

Моя попытка до сих пор:

a1 = (2*delta_c*rho_0*r_s)/(x**2-1) 
b1 = (2/(np.sqrt(1-x**2))) 
c1 = np.arctanh(np.sqrt((1-x)/(1+x))) 

a2 = (2*delta_c*rho_0*r_s)/(1-x**2) 
b2 = 2/(np.sqrt(x**2-1)) 
c2 = np.arctan(np.sqrt((x-1)/(1+x))) 


#finding sigma(x) 

for i in x: 
    if i<1: 
     sigma = a1*(1-(b1*c1)) 
    elif i == 1: 
     sigma = (2*delta_c*rho_0*r_s)/3 
    elif i>1: 
     sigma = a2*(1-(b2*c2)) 

Проблема заключается в том, если вы можете увидеть в моей формуле для a1, b1, c1 и a2, b2, c2, есть х участников. Поэтому мне нужно применять условия для й здесь также

+0

Это python .. ** списки **. Кроме того, можете ли вы показать нам свои попытки до сих пор? Вход и выход? – aIKid

+1

Не могли бы вы объяснить вашу проблему на примере? Или этот вопрос может быть закрыт для того, чтобы быть неясным. – thefourtheye

+0

@thefourtheye Я отредактировал мой вопрос – ThePredator

ответ

2

Вы можете сделать это довольно легко с булевым присвоением элемента (для Numpy массивов):

sigma = np.empty(x.shape) 
sigma[x<1] = a1*(1-(b1*c1)) 
sigma[x==1] = (2*delta_c*rho_0*r_s)/3 
sigma[x>1] = a2*(1-(b2*c2)) 
+1

+1 для использования numpy. – aIKid

+0

Альтернативная идиома: 'sigma = np.empty_like (x)' – heltonbiker

+0

@heltonbiker - Ах, да, я никогда не помню этого ;-), хотя это * может * указать неверный тип, если исходный массив является целым числом. – mgilson

1

Как о:

sigma = x 
for i, xi in enumerate(x): 
    a1 = (2*delta_c*rho_0*r_s)/(xi**2-1) 
    b1 = (2/(np.sqrt(1-xi**2))) 
    c1 = np.arctanh(np.sqrt((1-xi)/(1+xi))) 

    a2 = (2*delta_c*rho_0*r_s)/(1-xi**2) 
    b2 = 2/(np.sqrt(xi**2-1)) 
    c2 = np.arctan(np.sqrt((xi-1)/(1+xi))) 

    if xi<1: 
     sigma[i] = a1*(1-(b1*c1)) 
    elif xi == 1: 
     sigma[i] = (2*delta_c*rho_0*r_s)/3 
    elif xi>1: 
     sigma[i] = a2*(1-(b2*c2)) 
+0

Проблема в том, что вы можете видеть в моей формуле для a1, b1 и c1, есть x. Поэтому мне нужно также применить условия для x – ThePredator

+0

Итак, вы начинаете с массива n x 3, и вы хотите получить еще один массив n x 3? –

+0

Нет, я просто разделил формулу на a1, b1 и c1 для удобства. Если вы видите окончательную формулу для сигмы, это не что иное, как a1 * (1- (b1 * c1)), a2 * (1- (b2 * c2)) в соответствии с условием x – ThePredator

Смежные вопросы