Делает ли это то, что вам нужно?
def make_sample():
test=np.full((8,12), np.nan)
test[0,:6]=np.arange(6)
test[1,6:]=np.arange(6,18,2)
test[4:6,:]=2*test[:2,:]
return test
test=make_sample()
In [74]: test
Out[74]:
array([[ 0., 1., 2., 3., 4., 5., nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan, 6., 8., 10., 12., 14., 16.],
[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan],
[ 0., 2., 4., 6., 8., 10., nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan, 12., 16., 20., 24., 28., 32.],
[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]])
Создать массив, чтобы определить, какие строки НЕ являются всеми nans
filt=1^np.isnan(test).all(axis=1)
In [78]: filt
Out[78]: array([1, 1, 0, 0, 1, 1, 0, 0])
Использовать массив tat для сжатия теста в строки, которые all nans
compress=np.compress(filt, test, axis=0)
In [80]: compress
Out[80]:
array([[ 0., 1., 2., 3., 4., 5., nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan, 6., 8., 10., 12., 14., 16.],
[ 0., 2., 4., 6., 8., 10., nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan, 12., 16., 20., 24., 28., 32.]])
Установить наны на ноль
compress[np.isnan(compress)]=0
In [83]: compress
Out[83]:
array([[ 0., 1., 2., 3., 4., 5., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 6., 8., 10., 12., 14., 16.],
[ 0., 2., 4., 6., 8., 10., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 12., 16., 20., 24., 28., 32.]])
Добавить нечетные к четным строкам
In [84]: compress[::2,:]+compress[1::2,:]
Out[84]:
array([[ 0., 1., 2., 3., 4., 5., 6., 8., 10., 12., 14., 16.],
[ 0., 2., 4., 6., 8., 10., 12., 16., 20., 24., 28., 32.]])
Попробуйте это:
SELECT s_id, s_title, log10(Z) + (Y * s_timediff)/45000 AS redditfunction
FROM (
SELECT stories.s_id, stories.s_title, stories.s_time,
stories.s_time - now() AS s_timediff,
count(s_ups.s_id) - count(s_downs.s_id) as X,
if(X>0,1,if(x<0,-1,0)) as Y,
if(abs(x)>=1,abs(x),1) as Z
FROM stories
LEFT JOIN s_ups ON stories.q_id=s_ups.s_id
LEFT JOIN s_downs ON stories.s_id=s_downs.s_id
GROUP BY stories.s_id
) as derived_table1
Вы, возможно, должны были бы проверить этот оператор, если он работает с Вашими наборами данных.
y и z являются хитрыми. Вы хотите определенный возврат на основе значения x. Это походит на серьезное основание сделать функцию.
http://dev.mysql.com/doc/refman/5.0/en/if-statement.html
Необходимо сделать 1 функцию для y и один для передачи z. в x и ожидать, что число отступает.
DELIMINATOR //
CREATE FUNCTION y_element(x INT)
RETURNS INT
BEGIN
DECLARE y INT;
IF x > 0 SET y = 1;
ELSEIF x = 0 SET y = 0;
ELSEIF x < 0 SET y = -1;
END IF;
RETURN y;
END //;
DELIMINATOR;
Существует y. Я сделал это вручную, не проверяя, таким образом, Вам, вероятно, придется зафиксировать некоторых опечатка. Сделайте z тот же путь, и затем у Вас есть все значения для Вашей заключительной функции.