|
1188 | 1188 | "outputs": [],
|
1189 | 1189 | "source": []
|
1190 | 1190 | },
|
| 1191 | + { |
| 1192 | + "cell_type": "markdown", |
| 1193 | + "metadata": {}, |
| 1194 | + "source": [ |
| 1195 | + "### Task 4\n", |
| 1196 | + "\n", |
| 1197 | + "**EDGE DETECTION TASK; FIND SUITABLE IMAGE**" |
| 1198 | + ] |
| 1199 | + }, |
| 1200 | + { |
| 1201 | + "cell_type": "code", |
| 1202 | + "execution_count": null, |
| 1203 | + "metadata": {}, |
| 1204 | + "outputs": [], |
| 1205 | + "source": [] |
| 1206 | + }, |
1191 | 1207 | {
|
1192 | 1208 | "cell_type": "markdown",
|
1193 | 1209 | "metadata": {},
|
|
1217 | 1233 | },
|
1218 | 1234 | {
|
1219 | 1235 | "cell_type": "code",
|
1220 |
| - "execution_count": 225, |
| 1236 | + "execution_count": 2, |
1221 | 1237 | "metadata": {},
|
1222 | 1238 | "outputs": [
|
1223 | 1239 | {
|
|
1259 | 1275 | },
|
1260 | 1276 | {
|
1261 | 1277 | "cell_type": "code",
|
1262 |
| - "execution_count": 224, |
| 1278 | + "execution_count": 3, |
| 1279 | + "metadata": {}, |
| 1280 | + "outputs": [], |
| 1281 | + "source": [ |
| 1282 | + "D = A.sum(axis=0)" |
| 1283 | + ] |
| 1284 | + }, |
| 1285 | + { |
| 1286 | + "cell_type": "code", |
| 1287 | + "execution_count": 28, |
| 1288 | + "metadata": {}, |
| 1289 | + "outputs": [], |
| 1290 | + "source": [ |
| 1291 | + "L = sparse.diags(np.asarray(D)[0]) - A" |
| 1292 | + ] |
| 1293 | + }, |
| 1294 | + { |
| 1295 | + "cell_type": "markdown", |
| 1296 | + "metadata": {}, |
| 1297 | + "source": [ |
| 1298 | + "### Task 5\n", |
| 1299 | + "\n", |
| 1300 | + "Normalize the Laplacian matrix as follows:\n", |
| 1301 | + "\n", |
| 1302 | + "$$\n", |
| 1303 | + "L_{norm}=D^{-\\frac{1}{2}}LD^{-\\frac{1}{2}}\n", |
| 1304 | + "$$\n", |
| 1305 | + "\n", |
| 1306 | + "where $D^{-\\frac{1}{2}}$ is the negative one-over square-root $-\\frac{1}{\\sqrt{D_{ii}}}$applied to every element $D_{ii}$, given it is a diagonal matrix. Calculate the eigenvalues of this matrix and extract the second-smallest eigenvalue and eigenvector. This is known as the **Fiedler number** and Fiedler vector, respectively." |
| 1307 | + ] |
| 1308 | + }, |
| 1309 | + { |
| 1310 | + "cell_type": "code", |
| 1311 | + "execution_count": 50, |
| 1312 | + "metadata": {}, |
| 1313 | + "outputs": [ |
| 1314 | + { |
| 1315 | + "name": "stderr", |
| 1316 | + "output_type": "stream", |
| 1317 | + "text": [ |
| 1318 | + "//anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:1: RuntimeWarning: divide by zero encountered in true_divide\n", |
| 1319 | + " if __name__ == '__main__':\n" |
| 1320 | + ] |
| 1321 | + } |
| 1322 | + ], |
| 1323 | + "source": [ |
| 1324 | + "D_m = sparse.diags(-1. / np.asarray(np.sqrt(D))[0])\n", |
| 1325 | + "L_n = np.dot(D_m, np.dot(L, D_m))" |
| 1326 | + ] |
| 1327 | + }, |
| 1328 | + { |
| 1329 | + "cell_type": "code", |
| 1330 | + "execution_count": 54, |
1263 | 1331 | "metadata": {},
|
1264 | 1332 | "outputs": [
|
1265 | 1333 | {
|
1266 | 1334 | "data": {
|
1267 | 1335 | "text/plain": [
|
1268 |
| - "matrix([[3., 3., 5., 4., 4., 4., 4., 3., 4., 5., 4., 2., 3., 4., 4., 3.,\n", |
1269 |
| - " 3., 2., 1., 2., 2., 0., 2., 2., 2., 1., 2., 1., 4., 1.]])" |
| 1336 | + "True" |
1270 | 1337 | ]
|
1271 | 1338 | },
|
1272 |
| - "execution_count": 224, |
| 1339 | + "execution_count": 54, |
1273 | 1340 | "metadata": {},
|
1274 | 1341 | "output_type": "execute_result"
|
1275 | 1342 | }
|
1276 | 1343 | ],
|
1277 | 1344 | "source": [
|
1278 |
| - "A.sum(axis=0)" |
| 1345 | + "sparse.isspmatrix(L_n)" |
| 1346 | + ] |
| 1347 | + }, |
| 1348 | + { |
| 1349 | + "cell_type": "code", |
| 1350 | + "execution_count": 55, |
| 1351 | + "metadata": {}, |
| 1352 | + "outputs": [], |
| 1353 | + "source": [ |
| 1354 | + "import scipy" |
| 1355 | + ] |
| 1356 | + }, |
| 1357 | + { |
| 1358 | + "cell_type": "code", |
| 1359 | + "execution_count": 57, |
| 1360 | + "metadata": {}, |
| 1361 | + "outputs": [], |
| 1362 | + "source": [ |
| 1363 | + "np.linalg.eigvals?" |
| 1364 | + ] |
| 1365 | + }, |
| 1366 | + { |
| 1367 | + "cell_type": "code", |
| 1368 | + "execution_count": 62, |
| 1369 | + "metadata": {}, |
| 1370 | + "outputs": [], |
| 1371 | + "source": [ |
| 1372 | + "from scipy import linalg" |
| 1373 | + ] |
| 1374 | + }, |
| 1375 | + { |
| 1376 | + "cell_type": "code", |
| 1377 | + "execution_count": 64, |
| 1378 | + "metadata": {}, |
| 1379 | + "outputs": [ |
| 1380 | + { |
| 1381 | + "ename": "AttributeError", |
| 1382 | + "evalue": "module 'scipy.sparse' has no attribute 'linalg'", |
| 1383 | + "output_type": "error", |
| 1384 | + "traceback": [ |
| 1385 | + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", |
| 1386 | + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", |
| 1387 | + "\u001b[0;32m<ipython-input-64-5494f8ca95c2>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0msparse\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlinalg\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0meigh\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mL_n\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", |
| 1388 | + "\u001b[0;31mAttributeError\u001b[0m: module 'scipy.sparse' has no attribute 'linalg'" |
| 1389 | + ] |
| 1390 | + } |
| 1391 | + ], |
| 1392 | + "source": [ |
| 1393 | + "sparse.linalg.eigh(L_n)" |
| 1394 | + ] |
| 1395 | + }, |
| 1396 | + { |
| 1397 | + "cell_type": "code", |
| 1398 | + "execution_count": 63, |
| 1399 | + "metadata": {}, |
| 1400 | + "outputs": [ |
| 1401 | + { |
| 1402 | + "ename": "ValueError", |
| 1403 | + "evalue": "Sparse matrices are not supported by this function. Perhaps one of the scipy.sparse.linalg functions would work instead.", |
| 1404 | + "output_type": "error", |
| 1405 | + "traceback": [ |
| 1406 | + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", |
| 1407 | + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", |
| 1408 | + "\u001b[0;32m<ipython-input-63-32c28a44fd90>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mlinalg\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0meigh\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mL_n\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", |
| 1409 | + "\u001b[0;32m//anaconda/lib/python3.5/site-packages/scipy/linalg/decomp.py\u001b[0m in \u001b[0;36meigh\u001b[0;34m(a, b, lower, eigvals_only, overwrite_a, overwrite_b, turbo, eigvals, type, check_finite)\u001b[0m\n\u001b[1;32m 372\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 373\u001b[0m \"\"\"\n\u001b[0;32m--> 374\u001b[0;31m \u001b[0ma1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_asarray_validated\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcheck_finite\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcheck_finite\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 375\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;36m2\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0ma1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0ma1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 376\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'expected square matrix'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", |
| 1410 | + "\u001b[0;32m//anaconda/lib/python3.5/site-packages/scipy/_lib/_util.py\u001b[0m in \u001b[0;36m_asarray_validated\u001b[0;34m(a, check_finite, sparse_ok, objects_ok, mask_ok, as_inexact)\u001b[0m\n\u001b[1;32m 231\u001b[0m \u001b[0;34m'Perhaps one of the scipy.sparse.linalg functions '\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 232\u001b[0m 'would work instead.')\n\u001b[0;32m--> 233\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 234\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mmask_ok\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 235\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mma\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0misMaskedArray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", |
| 1411 | + "\u001b[0;31mValueError\u001b[0m: Sparse matrices are not supported by this function. Perhaps one of the scipy.sparse.linalg functions would work instead." |
| 1412 | + ] |
| 1413 | + } |
| 1414 | + ], |
| 1415 | + "source": [ |
| 1416 | + "linalg.eigh(L_n)" |
1279 | 1417 | ]
|
1280 | 1418 | },
|
1281 | 1419 | {
|
|
0 commit comments