Skip to content

Commit

Permalink
memoryviews > pointers
Browse files Browse the repository at this point in the history
  • Loading branch information
Eric Lundquist authored and Eric Lundquist committed Jun 8, 2020
1 parent 3be8e6d commit f931ebb
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 75 deletions.
64 changes: 32 additions & 32 deletions examples/cython-sandbox.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@
},
{
"cell_type": "code",
"execution_count": 46,
"execution_count": 65,
"metadata": {},
"outputs": [
{
Expand All @@ -286,19 +286,19 @@
"[1/1] Cythonizing /Users/ericlundquist/Repos/rankfm/rankfm/cython_methods.pyx\n",
"running build_ext\n",
"building 'rankfm.cython_methods' extension\n",
"creating /Users/ericlundquist/Repos/rankfm/tmpsjwmqyz_/Users\n",
"creating /Users/ericlundquist/Repos/rankfm/tmpsjwmqyz_/Users/ericlundquist\n",
"creating /Users/ericlundquist/Repos/rankfm/tmpsjwmqyz_/Users/ericlundquist/Repos\n",
"creating /Users/ericlundquist/Repos/rankfm/tmpsjwmqyz_/Users/ericlundquist/Repos/rankfm\n",
"creating /Users/ericlundquist/Repos/rankfm/tmpsjwmqyz_/Users/ericlundquist/Repos/rankfm/rankfm\n",
"gcc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/ericlundquist/anaconda3/include -arch x86_64 -I/Users/ericlundquist/anaconda3/include -arch x86_64 -I/Users/ericlundquist/anaconda3/include/python3.7m -c /Users/ericlundquist/Repos/rankfm/rankfm/cython_methods.c -o /Users/ericlundquist/Repos/rankfm/tmpsjwmqyz_/Users/ericlundquist/Repos/rankfm/rankfm/cython_methods.o\n",
"\u001b[1m/Users/ericlundquist/Repos/rankfm/rankfm/cython_methods.c:2329:12: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1m\n",
"creating /Users/ericlundquist/Repos/rankfm/tmpgyp5m532/Users\n",
"creating /Users/ericlundquist/Repos/rankfm/tmpgyp5m532/Users/ericlundquist\n",
"creating /Users/ericlundquist/Repos/rankfm/tmpgyp5m532/Users/ericlundquist/Repos\n",
"creating /Users/ericlundquist/Repos/rankfm/tmpgyp5m532/Users/ericlundquist/Repos/rankfm\n",
"creating /Users/ericlundquist/Repos/rankfm/tmpgyp5m532/Users/ericlundquist/Repos/rankfm/rankfm\n",
"gcc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/ericlundquist/anaconda3/include -arch x86_64 -I/Users/ericlundquist/anaconda3/include -arch x86_64 -I/Users/ericlundquist/anaconda3/include/python3.7m -c /Users/ericlundquist/Repos/rankfm/rankfm/cython_methods.c -o /Users/ericlundquist/Repos/rankfm/tmpgyp5m532/Users/ericlundquist/Repos/rankfm/rankfm/cython_methods.o\n",
"\u001b[1m/Users/ericlundquist/Repos/rankfm/rankfm/cython_methods.c:2332:12: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1m\n",
" unused function '__pyx_f_6rankfm_14cython_methods_bsearch'\n",
" [-Wunused-function]\u001b[0m\n",
"static int __pyx_f_6rankfm_14cython_methods_bsearch(int __pyx_v_item, in...\n",
"\u001b[0;1;32m ^\n",
"\u001b[0m1 warning generated.\n",
"gcc -bundle -undefined dynamic_lookup -L/Users/ericlundquist/anaconda3/lib -arch x86_64 -L/Users/ericlundquist/anaconda3/lib -arch x86_64 -arch x86_64 /Users/ericlundquist/Repos/rankfm/tmpsjwmqyz_/Users/ericlundquist/Repos/rankfm/rankfm/cython_methods.o -o /Users/ericlundquist/Repos/rankfm/rankfm/cython_methods.cpython-37m-darwin.so\n"
"gcc -bundle -undefined dynamic_lookup -L/Users/ericlundquist/anaconda3/lib -arch x86_64 -L/Users/ericlundquist/anaconda3/lib -arch x86_64 -arch x86_64 /Users/ericlundquist/Repos/rankfm/tmpgyp5m532/Users/ericlundquist/Repos/rankfm/rankfm/cython_methods.o -o /Users/ericlundquist/Repos/rankfm/rankfm/cython_methods.cpython-37m-darwin.so\n"
]
}
],
Expand All @@ -308,7 +308,7 @@
},
{
"cell_type": "code",
"execution_count": 47,
"execution_count": 66,
"metadata": {},
"outputs": [
{
Expand All @@ -329,7 +329,7 @@
" 'reg_penalty']"
]
},
"execution_count": 47,
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
Expand All @@ -348,16 +348,16 @@
},
{
"cell_type": "code",
"execution_count": 48,
"execution_count": 67,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<rankfm.rankfm.RankFM at 0x124f70128>"
"<rankfm.rankfm.RankFM at 0x124f6e978>"
]
},
"execution_count": 48,
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
Expand All @@ -377,7 +377,7 @@
},
{
"cell_type": "code",
"execution_count": 49,
"execution_count": 68,
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -401,7 +401,7 @@
},
{
"cell_type": "code",
"execution_count": 50,
"execution_count": 69,
"metadata": {},
"outputs": [
{
Expand All @@ -410,7 +410,7 @@
"((749724, 2), (749724,), 6040)"
]
},
"execution_count": 50,
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
Expand All @@ -428,7 +428,7 @@
},
{
"cell_type": "code",
"execution_count": 51,
"execution_count": 70,
"metadata": {},
"outputs": [
{
Expand All @@ -437,36 +437,36 @@
"text": [
"\n",
"training epoch: 0\n",
"log likelihood: -424968.625\n",
"log likelihood: -423383.0625\n",
"\n",
"training epoch: 1\n",
"log likelihood: -405820.75\n",
"log likelihood: -405400.1875\n",
"\n",
"training epoch: 2\n",
"log likelihood: -393735.71875\n",
"log likelihood: -393054.875\n",
"\n",
"training epoch: 3\n",
"log likelihood: -387102.3125\n",
"log likelihood: -386207.9375\n",
"\n",
"training epoch: 4\n",
"log likelihood: -382223.8125\n",
"log likelihood: -382201.5625\n",
"\n",
"training epoch: 5\n",
"log likelihood: -378838.9375\n",
"log likelihood: -378841.25\n",
"\n",
"training epoch: 6\n",
"log likelihood: -375917.3125\n",
"log likelihood: -376335.0\n",
"\n",
"training epoch: 7\n",
"log likelihood: -374355.59375\n",
"log likelihood: -373638.09375\n",
"\n",
"training epoch: 8\n",
"log likelihood: -372461.375\n",
"log likelihood: -372276.125\n",
"\n",
"training epoch: 9\n",
"log likelihood: -370886.28125\n",
"CPU times: user 9.89 s, sys: 49.7 ms, total: 9.94 s\n",
"Wall time: 9.94 s\n"
"log likelihood: -370797.53125\n",
"CPU times: user 9.95 s, sys: 31.7 ms, total: 9.98 s\n",
"Wall time: 9.97 s\n"
]
}
],
Expand Down Expand Up @@ -501,14 +501,14 @@
},
{
"cell_type": "code",
"execution_count": 52,
"execution_count": 71,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Cython Hit Rate: 0.7828751242133156\n"
"Cython Hit Rate: 0.7818814176879761\n"
]
}
],
Expand Down
58 changes: 15 additions & 43 deletions rankfm/cython_methods.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -47,20 +47,20 @@ cdef float compute_ui_utility(
int F,
int P,
int Q,
float *x_uf,
float *x_if,
float *w_i,
float *w_if,
float *v_u,
float *v_i,
float *v_uf,
float *v_if,
float[::1] x_uf,
float[::1] x_if,
float w_i,
float[::1] w_if,
float[::1] v_u,
float[::1] v_i,
float[:, ::1] v_uf,
float[:, ::1] v_if,
int x_uf_any,
int x_if_any
) nogil:

cdef int f, p, q
cdef float res = w_i[0]
cdef float res = w_i

for f in range(F):
# user * item: np.dot(v_u[u], v_i[i])
Expand All @@ -72,7 +72,7 @@ cdef float compute_ui_utility(
continue
for f in range(F):
# user-features * item: np.dot(x_uf[u], np.dot(v_uf, v_i[i]))
res += x_uf[p] * (v_uf[(F * p) + f] * v_i[f])
res += x_uf[p] * (v_uf[p, f] * v_i[f])

if x_if_any:
for q in range(Q):
Expand All @@ -82,7 +82,7 @@ cdef float compute_ui_utility(
res += x_if[q] * w_if[q]
for f in range(F):
# item-features * user: np.dot(x_if[i], np.dot(v_if, v_u[u]))
res += x_if[q] * (v_if[(F * q) + f] * v_u[f])
res += x_if[q] * (v_if[q, f] * v_u[f])

return res

Expand Down Expand Up @@ -123,8 +123,8 @@ def fit(
dict user_items,
float[:, ::1] x_uf,
float[:, ::1] x_if,
float[:] w_i,
float[:] w_if,
float[::1] w_i,
float[::1] w_if,
float[:, ::1] v_u,
float[:, ::1] v_i,
float[:, ::1] v_uf,
Expand Down Expand Up @@ -219,21 +219,7 @@ def fit(
sw = sample_weight[row]

# compute the utility score of the observed (u, i) pair
ut_ui = compute_ui_utility(
F,
P,
Q,
&x_uf[u, 0],
&x_if[i, 0],
&w_i[i],
&w_if[0],
&v_u[u, 0],
&v_i[i, 0],
&v_uf[0, 0],
&v_if[0, 0],
x_uf_any,
x_if_any
)
ut_ui = compute_ui_utility(F, P, Q, x_uf[u], x_if[i], w_i[i], w_if, v_u[u], v_i[i], v_uf, v_if, x_uf_any, x_if_any)

# WARP sampling loop for the (u, i) pair
# --------------------------------------
Expand All @@ -250,21 +236,7 @@ def fit(
break

# compute the utility score of the unobserved (u, j) pair and the subsequent pairwise utility
ut_uj = compute_ui_utility(
F,
P,
Q,
&x_uf[u, 0],
&x_if[j, 0],
&w_i[j],
&w_if[0],
&v_u[u, 0],
&v_i[j, 0],
&v_uf[0, 0],
&v_if[0, 0],
x_uf_any,
x_if_any
)
ut_uj = compute_ui_utility(F, P, Q, x_uf[u], x_if[j], w_i[j], w_if, v_u[u], v_i[j], v_uf, v_if, x_uf_any, x_if_any)
pairwise_utility = ut_ui - ut_uj

if pairwise_utility < min_pairwise_utility:
Expand Down

0 comments on commit f931ebb

Please sign in to comment.