From 1440873b46826ac8f39c7cd22a625dd3a689e613 Mon Sep 17 00:00:00 2001 From: Tom Date: Wed, 11 Jun 2025 10:40:22 +0200 Subject: [PATCH] Move birthday --- .gitignore | 2 +- HappyBirthdaySophie/.DS_Store | Bin 6148 -> 0 bytes .../compute_distance_field-checkpoint.ipynb | 929 ------------------ .../.ipynb_checkpoints/index-checkpoint.html | 14 - .../.ipynb_checkpoints/sketch-checkpoint.js | 103 -- .../.ipynb_checkpoints/style-checkpoint.css | 13 - .../HappyBirthdaySophie}/birthday.png | Bin .../compute_distance_field.ipynb | 0 .../HappyBirthdaySophie}/distfield.png | Bin .../HappyBirthdaySophie}/index.html | 0 .../HappyBirthdaySophie}/p5.js | 0 .../HappyBirthdaySophie}/sketch.js | 0 .../HappyBirthdaySophie}/style.css | 0 13 files changed, 1 insertion(+), 1060 deletions(-) delete mode 100644 HappyBirthdaySophie/.DS_Store delete mode 100644 HappyBirthdaySophie/.ipynb_checkpoints/compute_distance_field-checkpoint.ipynb delete mode 100644 HappyBirthdaySophie/.ipynb_checkpoints/index-checkpoint.html delete mode 100644 HappyBirthdaySophie/.ipynb_checkpoints/sketch-checkpoint.js delete mode 100644 HappyBirthdaySophie/.ipynb_checkpoints/style-checkpoint.css rename {HappyBirthdaySophie => experiments/HappyBirthdaySophie}/birthday.png (100%) rename {HappyBirthdaySophie => experiments/HappyBirthdaySophie}/compute_distance_field.ipynb (100%) rename {HappyBirthdaySophie => experiments/HappyBirthdaySophie}/distfield.png (100%) rename {HappyBirthdaySophie => experiments/HappyBirthdaySophie}/index.html (100%) rename {HappyBirthdaySophie => experiments/HappyBirthdaySophie}/p5.js (100%) rename {HappyBirthdaySophie => experiments/HappyBirthdaySophie}/sketch.js (100%) rename {HappyBirthdaySophie => experiments/HappyBirthdaySophie}/style.css (100%) diff --git a/.gitignore b/.gitignore index 950b343..888038c 100644 --- a/.gitignore +++ b/.gitignore @@ -15,5 +15,5 @@ package-lock.json *.pdf *.fbx *.secret -*.ipynb +# *.ipynb /scripts/dead-link-checker diff --git a/HappyBirthdaySophie/.DS_Store b/HappyBirthdaySophie/.DS_Store deleted file mode 100644 index 732d5a905451f140996a7743947cf2b05bfbe1c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJx{|h5Pb(lw0uY%89HQSs>Hy=5>*9>nI8a6TWBFoE80r15+uZte=9bbzA5%=Y*GqDTxaRJUF=xAn zjD704rDuqgJ#DsTd^a*A)p7A!824~BPLVw$vpl0W&ZEfOV~&jMA)c6T#Fbb>;>00+Qg8T4U7fXoRZZhYhKPFA0-AK%}fDPz!dm# z1$btw)%QJGZ3>tIroc)8{XRr2igCc)qx*EQa#sLijc#Xb>#w46qJVM0+#`Ev;;BSW zm2kxnPp3Z$adE)hqo+f{" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "im" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "('PNG', (500, 500), 'RGBA')" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(im.format, im.size, im.mode)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(500, 500, 4)" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.array(im).shape" - ] - }, - { - "cell_type": "code", - "execution_count": 132, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 132, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "src = np.array(im.convert('L')) > 240\n", - "plt.imshow(src)" - ] - }, - { - "cell_type": "code", - "execution_count": 138, - "metadata": {}, - "outputs": [ - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "%%time\n", - "src = np.array(im.convert('L')) > 240\n", - "dist = np.ones(shape = (500,500)) * 1000\n", - "i, j = np.array(np.where(1 - src))[:, ::1000].reshape(2, 1, 1, -1)\n", - "I = np.arange(500).reshape(-1,1,1)\n", - "J = np.arange(500).reshape(1,-1,1)\n", - "\n", - "for i,j in pixels:\n", - " d = np.sqrt((I - i)**2 + (J - j)**2)\n", - " dist = np.minimum(dist, d)" - ] - }, - { - "cell_type": "code", - "execution_count": 145, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0\n", - "1\n", - "2\n", - "3\n", - "4\n", - "5\n", - "6\n", - "7\n", - "8\n", - "9\n", - "CPU times: user 1min 8s, sys: 3min 11s, total: 4min 20s\n", - "Wall time: 8min 35s\n" - ] - } - ], - "source": [ - "%%time\n", - "pixels = np.array(np.where(1 - src))\n", - "I = np.arange(500).reshape(-1,1,1)\n", - "J = np.arange(500).reshape(1,-1,1)\n", - "\n", - "dist = np.ones((500,500)) * 1000\n", - "for k in range(10):\n", - " print(k)\n", - " i, j = pixels[:, k::10].reshape(2, 1, 1, -1)\n", - " dist = np.minimum(dist, np.min(np.sqrt((I - i)**2 + (J - j)**2), axis = -1))" - ] - }, - { - "cell_type": "code", - "execution_count": 129, - "metadata": {}, - "outputs": [ - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n", - "\u001b[0;32m\u001b[0m in \u001b[0;36mcompute\u001b[0;34m(k)\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "%%time\n", - "pixels = np.array(np.where(1 - src))[:, :]\n", - "I = np.arange(500).reshape(-1,1,1)\n", - "J = np.arange(500).reshape(1,-1,1)\n", - "\n", - "groups = 50\n", - "\n", - "def compute(k):\n", - " i, j = pixels[:, k::groups].reshape(2, 1, 1, -1)\n", - " dist = np.min(np.sqrt((I - i)**2 + (J - j)**2), axis = -1, initial = 1000)\n", - " return dist\n", - "\n", - "dist = np.min([compute(k) for k in range(groups)], axis = 0)" - ] - }, - { - "cell_type": "code", - "execution_count": 154, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 154, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "quantised = 255 - (dist / np.max(dist) * 255).astype(np.uint8)\n", - "#quantised = (quantised % 2) * 255\n", - "im2 = Image.fromarray(quantised, mode = 'L')\n", - "im2 = im2.convert(\"RGBA\")\n", - "im2.save('distfield.png')\n", - "im2" - ] - }, - { - "cell_type": "code", - "execution_count": 151, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Help on ufunc object:\n", - "\n", - "log = class ufunc(builtins.object)\n", - " | Functions that operate element by element on whole arrays.\n", - " | \n", - " | To see the documentation for a specific ufunc, use `info`. For\n", - " | example, ``np.info(np.sin)``. Because ufuncs are written in C\n", - " | (for speed) and linked into Python with NumPy's ufunc facility,\n", - " | Python's help() function finds this page whenever help() is called\n", - " | on a ufunc.\n", - " | \n", - " | A detailed explanation of ufuncs can be found in the docs for :ref:`ufuncs`.\n", - " | \n", - " | **Calling ufuncs:** ``op(*x[, out], where=True, **kwargs)``\n", - " | \n", - " | Apply `op` to the arguments `*x` elementwise, broadcasting the arguments.\n", - " | \n", - " | The broadcasting rules are:\n", - " | \n", - " | * Dimensions of length 1 may be prepended to either array.\n", - " | * Arrays may be repeated along dimensions of length 1.\n", - " | \n", - " | Parameters\n", - " | ----------\n", - " | *x : array_like\n", - " | Input arrays.\n", - " | out : ndarray, None, or tuple of ndarray and None, optional\n", - " | Alternate array object(s) in which to put the result; if provided, it\n", - " | must have a shape that the inputs broadcast to. A tuple of arrays\n", - " | (possible only as a keyword argument) must have length equal to the\n", - " | number of outputs; use None for uninitialized outputs to be\n", - " | allocated by the ufunc.\n", - " | where : array_like, optional\n", - " | This condition is broadcast over the input. At locations where the\n", - " | condition is True, the `out` array will be set to the ufunc result.\n", - " | Elsewhere, the `out` array will retain its original value.\n", - " | Note that if an uninitialized `out` array is created via the default\n", - " | ``out=None``, locations within it where the condition is False will\n", - " | remain uninitialized.\n", - " | **kwargs\n", - " | For other keyword-only arguments, see the :ref:`ufunc docs `.\n", - " | \n", - " | Returns\n", - " | -------\n", - " | r : ndarray or tuple of ndarray\n", - " | `r` will have the shape that the arrays in `x` broadcast to; if `out` is\n", - " | provided, it will be returned. If not, `r` will be allocated and\n", - " | may contain uninitialized values. If the function has more than one\n", - " | output, then the result will be a tuple of arrays.\n", - " | \n", - " | Methods defined here:\n", - " | \n", - " | __call__(self, /, *args, **kwargs)\n", - " | Call self as a function.\n", - " | \n", - " | __repr__(self, /)\n", - " | Return repr(self).\n", - " | \n", - " | __str__(self, /)\n", - " | Return str(self).\n", - " | \n", - " | accumulate(...)\n", - " | accumulate(array, axis=0, dtype=None, out=None)\n", - " | \n", - " | Accumulate the result of applying the operator to all elements.\n", - " | \n", - " | For a one-dimensional array, accumulate produces results equivalent to::\n", - " | \n", - " | r = np.empty(len(A))\n", - " | t = op.identity # op = the ufunc being applied to A's elements\n", - " | for i in range(len(A)):\n", - " | t = op(t, A[i])\n", - " | r[i] = t\n", - " | return r\n", - " | \n", - " | For example, add.accumulate() is equivalent to np.cumsum().\n", - " | \n", - " | For a multi-dimensional array, accumulate is applied along only one\n", - " | axis (axis zero by default; see Examples below) so repeated use is\n", - " | necessary if one wants to accumulate over multiple axes.\n", - " | \n", - " | Parameters\n", - " | ----------\n", - " | array : array_like\n", - " | The array to act on.\n", - " | axis : int, optional\n", - " | The axis along which to apply the accumulation; default is zero.\n", - " | dtype : data-type code, optional\n", - " | The data-type used to represent the intermediate results. Defaults\n", - " | to the data-type of the output array if such is provided, or the\n", - " | the data-type of the input array if no output array is provided.\n", - " | out : ndarray, None, or tuple of ndarray and None, optional\n", - " | A location into which the result is stored. If not provided or None,\n", - " | a freshly-allocated array is returned. For consistency with\n", - " | ``ufunc.__call__``, if given as a keyword, this may be wrapped in a\n", - " | 1-element tuple.\n", - " | \n", - " | .. versionchanged:: 1.13.0\n", - " | Tuples are allowed for keyword argument.\n", - " | \n", - " | Returns\n", - " | -------\n", - " | r : ndarray\n", - " | The accumulated values. If `out` was supplied, `r` is a reference to\n", - " | `out`.\n", - " | \n", - " | Examples\n", - " | --------\n", - " | 1-D array examples:\n", - " | \n", - " | >>> np.add.accumulate([2, 3, 5])\n", - " | array([ 2, 5, 10])\n", - " | >>> np.multiply.accumulate([2, 3, 5])\n", - " | array([ 2, 6, 30])\n", - " | \n", - " | 2-D array examples:\n", - " | \n", - " | >>> I = np.eye(2)\n", - " | >>> I\n", - " | array([[1., 0.],\n", - " | [0., 1.]])\n", - " | \n", - " | Accumulate along axis 0 (rows), down columns:\n", - " | \n", - " | >>> np.add.accumulate(I, 0)\n", - " | array([[1., 0.],\n", - " | [1., 1.]])\n", - " | >>> np.add.accumulate(I) # no axis specified = axis zero\n", - " | array([[1., 0.],\n", - " | [1., 1.]])\n", - " | \n", - " | Accumulate along axis 1 (columns), through rows:\n", - " | \n", - " | >>> np.add.accumulate(I, 1)\n", - " | array([[1., 1.],\n", - " | [0., 1.]])\n", - " | \n", - " | at(...)\n", - " | at(a, indices, b=None)\n", - " | \n", - " | Performs unbuffered in place operation on operand 'a' for elements\n", - " | specified by 'indices'. For addition ufunc, this method is equivalent to\n", - " | ``a[indices] += b``, except that results are accumulated for elements that\n", - " | are indexed more than once. For example, ``a[[0,0]] += 1`` will only\n", - " | increment the first element once because of buffering, whereas\n", - " | ``add.at(a, [0,0], 1)`` will increment the first element twice.\n", - " | \n", - " | .. versionadded:: 1.8.0\n", - " | \n", - " | Parameters\n", - " | ----------\n", - " | a : array_like\n", - " | The array to perform in place operation on.\n", - " | indices : array_like or tuple\n", - " | Array like index object or slice object for indexing into first\n", - " | operand. If first operand has multiple dimensions, indices can be a\n", - " | tuple of array like index objects or slice objects.\n", - " | b : array_like\n", - " | Second operand for ufuncs requiring two operands. Operand must be\n", - " | broadcastable over first operand after indexing or slicing.\n", - " | \n", - " | Examples\n", - " | --------\n", - " | Set items 0 and 1 to their negative values:\n", - " | \n", - " | >>> a = np.array([1, 2, 3, 4])\n", - " | >>> np.negative.at(a, [0, 1])\n", - " | >>> a\n", - " | array([-1, -2, 3, 4])\n", - " | \n", - " | Increment items 0 and 1, and increment item 2 twice:\n", - " | \n", - " | >>> a = np.array([1, 2, 3, 4])\n", - " | >>> np.add.at(a, [0, 1, 2, 2], 1)\n", - " | >>> a\n", - " | array([2, 3, 5, 4])\n", - " | \n", - " | Add items 0 and 1 in first array to second array,\n", - " | and store results in first array:\n", - " | \n", - " | >>> a = np.array([1, 2, 3, 4])\n", - " | >>> b = np.array([1, 2])\n", - " | >>> np.add.at(a, [0, 1], b)\n", - " | >>> a\n", - " | array([2, 4, 3, 4])\n", - " | \n", - " | outer(...)\n", - " | outer(A, B, **kwargs)\n", - " | \n", - " | Apply the ufunc `op` to all pairs (a, b) with a in `A` and b in `B`.\n", - " | \n", - " | Let ``M = A.ndim``, ``N = B.ndim``. Then the result, `C`, of\n", - " | ``op.outer(A, B)`` is an array of dimension M + N such that:\n", - " | \n", - " | .. math:: C[i_0, ..., i_{M-1}, j_0, ..., j_{N-1}] =\n", - " | op(A[i_0, ..., i_{M-1}], B[j_0, ..., j_{N-1}])\n", - " | \n", - " | For `A` and `B` one-dimensional, this is equivalent to::\n", - " | \n", - " | r = empty(len(A),len(B))\n", - " | for i in range(len(A)):\n", - " | for j in range(len(B)):\n", - " | r[i,j] = op(A[i], B[j]) # op = ufunc in question\n", - " | \n", - " | Parameters\n", - " | ----------\n", - " | A : array_like\n", - " | First array\n", - " | B : array_like\n", - " | Second array\n", - " | kwargs : any\n", - " | Arguments to pass on to the ufunc. Typically `dtype` or `out`.\n", - " | \n", - " | Returns\n", - " | -------\n", - " | r : ndarray\n", - " | Output array\n", - " | \n", - " | See Also\n", - " | --------\n", - " | numpy.outer : A less powerful version of ``np.multiply.outer``\n", - " | that `ravel`\\ s all inputs to 1D. This exists\n", - " | primarily for compatibility with old code.\n", - " | \n", - " | tensordot : ``np.tensordot(a, b, axes=((), ()))`` and\n", - " | ``np.multiply.outer(a, b)`` behave same for all\n", - " | dimensions of a and b.\n", - " | \n", - " | Examples\n", - " | --------\n", - " | >>> np.multiply.outer([1, 2, 3], [4, 5, 6])\n", - " | array([[ 4, 5, 6],\n", - " | [ 8, 10, 12],\n", - " | [12, 15, 18]])\n", - " | \n", - " | A multi-dimensional example:\n", - " | \n", - " | >>> A = np.array([[1, 2, 3], [4, 5, 6]])\n", - " | >>> A.shape\n", - " | (2, 3)\n", - " | >>> B = np.array([[1, 2, 3, 4]])\n", - " | >>> B.shape\n", - " | (1, 4)\n", - " | >>> C = np.multiply.outer(A, B)\n", - " | >>> C.shape; C\n", - " | (2, 3, 1, 4)\n", - " | array([[[[ 1, 2, 3, 4]],\n", - " | [[ 2, 4, 6, 8]],\n", - " | [[ 3, 6, 9, 12]]],\n", - " | [[[ 4, 8, 12, 16]],\n", - " | [[ 5, 10, 15, 20]],\n", - " | [[ 6, 12, 18, 24]]]])\n", - " | \n", - " | reduce(...)\n", - " | reduce(a, axis=0, dtype=None, out=None, keepdims=False, initial=, where=True)\n", - " | \n", - " | Reduces `a`'s dimension by one, by applying ufunc along one axis.\n", - " | \n", - " | Let :math:`a.shape = (N_0, ..., N_i, ..., N_{M-1})`. Then\n", - " | :math:`ufunc.reduce(a, axis=i)[k_0, ..,k_{i-1}, k_{i+1}, .., k_{M-1}]` =\n", - " | the result of iterating `j` over :math:`range(N_i)`, cumulatively applying\n", - " | ufunc to each :math:`a[k_0, ..,k_{i-1}, j, k_{i+1}, .., k_{M-1}]`.\n", - " | For a one-dimensional array, reduce produces results equivalent to:\n", - " | ::\n", - " | \n", - " | r = op.identity # op = ufunc\n", - " | for i in range(len(A)):\n", - " | r = op(r, A[i])\n", - " | return r\n", - " | \n", - " | For example, add.reduce() is equivalent to sum().\n", - " | \n", - " | Parameters\n", - " | ----------\n", - " | a : array_like\n", - " | The array to act on.\n", - " | axis : None or int or tuple of ints, optional\n", - " | Axis or axes along which a reduction is performed.\n", - " | The default (`axis` = 0) is perform a reduction over the first\n", - " | dimension of the input array. `axis` may be negative, in\n", - " | which case it counts from the last to the first axis.\n", - " | \n", - " | .. versionadded:: 1.7.0\n", - " | \n", - " | If this is None, a reduction is performed over all the axes.\n", - " | If this is a tuple of ints, a reduction is performed on multiple\n", - " | axes, instead of a single axis or all the axes as before.\n", - " | \n", - " | For operations which are either not commutative or not associative,\n", - " | doing a reduction over multiple axes is not well-defined. The\n", - " | ufuncs do not currently raise an exception in this case, but will\n", - " | likely do so in the future.\n", - " | dtype : data-type code, optional\n", - " | The type used to represent the intermediate results. Defaults\n", - " | to the data-type of the output array if this is provided, or\n", - " | the data-type of the input array if no output array is provided.\n", - " | out : ndarray, None, or tuple of ndarray and None, optional\n", - " | A location into which the result is stored. If not provided or None,\n", - " | a freshly-allocated array is returned. For consistency with\n", - " | ``ufunc.__call__``, if given as a keyword, this may be wrapped in a\n", - " | 1-element tuple.\n", - " | \n", - " | .. versionchanged:: 1.13.0\n", - " | Tuples are allowed for keyword argument.\n", - " | keepdims : bool, optional\n", - " | If this is set to True, the axes which are reduced are left\n", - " | in the result as dimensions with size one. With this option,\n", - " | the result will broadcast correctly against the original `arr`.\n", - " | \n", - " | .. versionadded:: 1.7.0\n", - " | initial : scalar, optional\n", - " | The value with which to start the reduction.\n", - " | If the ufunc has no identity or the dtype is object, this defaults\n", - " | to None - otherwise it defaults to ufunc.identity.\n", - " | If ``None`` is given, the first element of the reduction is used,\n", - " | and an error is thrown if the reduction is empty.\n", - " | \n", - " | .. versionadded:: 1.15.0\n", - " | \n", - " | where : array_like of bool, optional\n", - " | A boolean array which is broadcasted to match the dimensions\n", - " | of `a`, and selects elements to include in the reduction. Note\n", - " | that for ufuncs like ``minimum`` that do not have an identity\n", - " | defined, one has to pass in also ``initial``.\n", - " | \n", - " | .. versionadded:: 1.17.0\n", - " | \n", - " | Returns\n", - " | -------\n", - " | r : ndarray\n", - " | The reduced array. If `out` was supplied, `r` is a reference to it.\n", - " | \n", - " | Examples\n", - " | --------\n", - " | >>> np.multiply.reduce([2,3,5])\n", - " | 30\n", - " | \n", - " | A multi-dimensional array example:\n", - " | \n", - " | >>> X = np.arange(8).reshape((2,2,2))\n", - " | >>> X\n", - " | array([[[0, 1],\n", - " | [2, 3]],\n", - " | [[4, 5],\n", - " | [6, 7]]])\n", - " | >>> np.add.reduce(X, 0)\n", - " | array([[ 4, 6],\n", - " | [ 8, 10]])\n", - " | >>> np.add.reduce(X) # confirm: default axis value is 0\n", - " | array([[ 4, 6],\n", - " | [ 8, 10]])\n", - " | >>> np.add.reduce(X, 1)\n", - " | array([[ 2, 4],\n", - " | [10, 12]])\n", - " | >>> np.add.reduce(X, 2)\n", - " | array([[ 1, 5],\n", - " | [ 9, 13]])\n", - " | \n", - " | You can use the ``initial`` keyword argument to initialize the reduction\n", - " | with a different value, and ``where`` to select specific elements to include:\n", - " | \n", - " | >>> np.add.reduce([10], initial=5)\n", - " | 15\n", - " | >>> np.add.reduce(np.ones((2, 2, 2)), axis=(0, 2), initial=10)\n", - " | array([14., 14.])\n", - " | >>> a = np.array([10., np.nan, 10])\n", - " | >>> np.add.reduce(a, where=~np.isnan(a))\n", - " | 20.0\n", - " | \n", - " | Allows reductions of empty arrays where they would normally fail, i.e.\n", - " | for ufuncs without an identity.\n", - " | \n", - " | >>> np.minimum.reduce([], initial=np.inf)\n", - " | inf\n", - " | >>> np.minimum.reduce([[1., 2.], [3., 4.]], initial=10., where=[True, False])\n", - " | array([ 1., 10.])\n", - " | >>> np.minimum.reduce([])\n", - " | Traceback (most recent call last):\n", - " | ...\n", - " | ValueError: zero-size array to reduction operation minimum which has no identity\n", - " | \n", - " | reduceat(...)\n", - " | reduceat(a, indices, axis=0, dtype=None, out=None)\n", - " | \n", - " | Performs a (local) reduce with specified slices over a single axis.\n", - " | \n", - " | For i in ``range(len(indices))``, `reduceat` computes\n", - " | ``ufunc.reduce(a[indices[i]:indices[i+1]])``, which becomes the i-th\n", - " | generalized \"row\" parallel to `axis` in the final result (i.e., in a\n", - " | 2-D array, for example, if `axis = 0`, it becomes the i-th row, but if\n", - " | `axis = 1`, it becomes the i-th column). There are three exceptions to this:\n", - " | \n", - " | * when ``i = len(indices) - 1`` (so for the last index),\n", - " | ``indices[i+1] = a.shape[axis]``.\n", - " | * if ``indices[i] >= indices[i + 1]``, the i-th generalized \"row\" is\n", - " | simply ``a[indices[i]]``.\n", - " | * if ``indices[i] >= len(a)`` or ``indices[i] < 0``, an error is raised.\n", - " | \n", - " | The shape of the output depends on the size of `indices`, and may be\n", - " | larger than `a` (this happens if ``len(indices) > a.shape[axis]``).\n", - " | \n", - " | Parameters\n", - " | ----------\n", - " | a : array_like\n", - " | The array to act on.\n", - " | indices : array_like\n", - " | Paired indices, comma separated (not colon), specifying slices to\n", - " | reduce.\n", - " | axis : int, optional\n", - " | The axis along which to apply the reduceat.\n", - " | dtype : data-type code, optional\n", - " | The type used to represent the intermediate results. Defaults\n", - " | to the data type of the output array if this is provided, or\n", - " | the data type of the input array if no output array is provided.\n", - " | out : ndarray, None, or tuple of ndarray and None, optional\n", - " | A location into which the result is stored. If not provided or None,\n", - " | a freshly-allocated array is returned. For consistency with\n", - " | ``ufunc.__call__``, if given as a keyword, this may be wrapped in a\n", - " | 1-element tuple.\n", - " | \n", - " | .. versionchanged:: 1.13.0\n", - " | Tuples are allowed for keyword argument.\n", - " | \n", - " | Returns\n", - " | -------\n", - " | r : ndarray\n", - " | The reduced values. If `out` was supplied, `r` is a reference to\n", - " | `out`.\n", - " | \n", - " | Notes\n", - " | -----\n", - " | A descriptive example:\n", - " | \n", - " | If `a` is 1-D, the function `ufunc.accumulate(a)` is the same as\n", - " | ``ufunc.reduceat(a, indices)[::2]`` where `indices` is\n", - " | ``range(len(array) - 1)`` with a zero placed\n", - " | in every other element:\n", - " | ``indices = zeros(2 * len(a) - 1)``, ``indices[1::2] = range(1, len(a))``.\n", - " | \n", - " | Don't be fooled by this attribute's name: `reduceat(a)` is not\n", - " | necessarily smaller than `a`.\n", - " | \n", - " | Examples\n", - " | --------\n", - " | To take the running sum of four successive values:\n", - " | \n", - " | >>> np.add.reduceat(np.arange(8),[0,4, 1,5, 2,6, 3,7])[::2]\n", - " | array([ 6, 10, 14, 18])\n", - " | \n", - " | A 2-D example:\n", - " | \n", - " | >>> x = np.linspace(0, 15, 16).reshape(4,4)\n", - " | >>> x\n", - " | array([[ 0., 1., 2., 3.],\n", - " | [ 4., 5., 6., 7.],\n", - " | [ 8., 9., 10., 11.],\n", - " | [12., 13., 14., 15.]])\n", - " | \n", - " | ::\n", - " | \n", - " | # reduce such that the result has the following five rows:\n", - " | # [row1 + row2 + row3]\n", - " | # [row4]\n", - " | # [row2]\n", - " | # [row3]\n", - " | # [row1 + row2 + row3 + row4]\n", - " | \n", - " | >>> np.add.reduceat(x, [0, 3, 1, 2, 0])\n", - " | array([[12., 15., 18., 21.],\n", - " | [12., 13., 14., 15.],\n", - " | [ 4., 5., 6., 7.],\n", - " | [ 8., 9., 10., 11.],\n", - " | [24., 28., 32., 36.]])\n", - " | \n", - " | ::\n", - " | \n", - " | # reduce such that result has the following two columns:\n", - " | # [col1 * col2 * col3, col4]\n", - " | \n", - " | >>> np.multiply.reduceat(x, [0, 3], 1)\n", - " | array([[ 0., 3.],\n", - " | [ 120., 7.],\n", - " | [ 720., 11.],\n", - " | [2184., 15.]])\n", - " | \n", - " | ----------------------------------------------------------------------\n", - " | Data descriptors defined here:\n", - " | \n", - " | identity\n", - " | The identity value.\n", - " | \n", - " | Data attribute containing the identity element for the ufunc, if it has one.\n", - " | If it does not, the attribute value is None.\n", - " | \n", - " | Examples\n", - " | --------\n", - " | >>> np.add.identity\n", - " | 0\n", - " | >>> np.multiply.identity\n", - " | 1\n", - " | >>> np.power.identity\n", - " | 1\n", - " | >>> print(np.exp.identity)\n", - " | None\n", - " | \n", - " | nargs\n", - " | The number of arguments.\n", - " | \n", - " | Data attribute containing the number of arguments the ufunc takes, including\n", - " | optional ones.\n", - " | \n", - " | Notes\n", - " | -----\n", - " | Typically this value will be one more than what you might expect because all\n", - " | ufuncs take the optional \"out\" argument.\n", - " | \n", - " | Examples\n", - " | --------\n", - " | >>> np.add.nargs\n", - " | 3\n", - " | >>> np.multiply.nargs\n", - " | 3\n", - " | >>> np.power.nargs\n", - " | 3\n", - " | >>> np.exp.nargs\n", - " | 2\n", - " | \n", - " | nin\n", - " | The number of inputs.\n", - " | \n", - " | Data attribute containing the number of arguments the ufunc treats as input.\n", - " | \n", - " | Examples\n", - " | --------\n", - " | >>> np.add.nin\n", - " | 2\n", - " | >>> np.multiply.nin\n", - " | 2\n", - " | >>> np.power.nin\n", - " | 2\n", - " | >>> np.exp.nin\n", - " | 1\n", - " | \n", - " | nout\n", - " | The number of outputs.\n", - " | \n", - " | Data attribute containing the number of arguments the ufunc treats as output.\n", - " | \n", - " | Notes\n", - " | -----\n", - " | Since all ufuncs can take output arguments, this will always be (at least) 1.\n", - " | \n", - " | Examples\n", - " | --------\n", - " | >>> np.add.nout\n", - " | 1\n", - " | >>> np.multiply.nout\n", - " | 1\n", - " | >>> np.power.nout\n", - " | 1\n", - " | >>> np.exp.nout\n", - " | 1\n", - " | \n", - " | ntypes\n", - " | The number of types.\n", - " | \n", - " | The number of numerical NumPy types - of which there are 18 total - on which\n", - " | the ufunc can operate.\n", - " | \n", - " | See Also\n", - " | --------\n", - " | numpy.ufunc.types\n", - " | \n", - " | Examples\n", - " | --------\n", - " | >>> np.add.ntypes\n", - " | 18\n", - " | >>> np.multiply.ntypes\n", - " | 18\n", - " | >>> np.power.ntypes\n", - " | 17\n", - " | >>> np.exp.ntypes\n", - " | 7\n", - " | >>> np.remainder.ntypes\n", - " | 14\n", - " | \n", - " | signature\n", - " | Definition of the core elements a generalized ufunc operates on.\n", - " | \n", - " | The signature determines how the dimensions of each input/output array\n", - " | are split into core and loop dimensions:\n", - " | \n", - " | 1. Each dimension in the signature is matched to a dimension of the\n", - " | corresponding passed-in array, starting from the end of the shape tuple.\n", - " | 2. Core dimensions assigned to the same label in the signature must have\n", - " | exactly matching sizes, no broadcasting is performed.\n", - " | 3. The core dimensions are removed from all inputs and the remaining\n", - " | dimensions are broadcast together, defining the loop dimensions.\n", - " | \n", - " | Notes\n", - " | -----\n", - " | Generalized ufuncs are used internally in many linalg functions, and in\n", - " | the testing suite; the examples below are taken from these.\n", - " | For ufuncs that operate on scalars, the signature is None, which is\n", - " | equivalent to '()' for every argument.\n", - " | \n", - " | Examples\n", - " | --------\n", - " | >>> np.core.umath_tests.matrix_multiply.signature\n", - " | '(m,n),(n,p)->(m,p)'\n", - " | >>> np.linalg._umath_linalg.det.signature\n", - " | '(m,m)->()'\n", - " | >>> np.add.signature is None\n", - " | True # equivalent to '(),()->()'\n", - " | \n", - " | types\n", - " | Returns a list with types grouped input->output.\n", - " | \n", - " | Data attribute listing the data-type \"Domain-Range\" groupings the ufunc can\n", - " | deliver. The data-types are given using the character codes.\n", - " | \n", - " | See Also\n", - " | --------\n", - " | numpy.ufunc.ntypes\n", - " | \n", - " | Examples\n", - " | --------\n", - " | >>> np.add.types\n", - " | ['??->?', 'bb->b', 'BB->B', 'hh->h', 'HH->H', 'ii->i', 'II->I', 'll->l',\n", - " | 'LL->L', 'qq->q', 'QQ->Q', 'ff->f', 'dd->d', 'gg->g', 'FF->F', 'DD->D',\n", - " | 'GG->G', 'OO->O']\n", - " | \n", - " | >>> np.multiply.types\n", - " | ['??->?', 'bb->b', 'BB->B', 'hh->h', 'HH->H', 'ii->i', 'II->I', 'll->l',\n", - " | 'LL->L', 'qq->q', 'QQ->Q', 'ff->f', 'dd->d', 'gg->g', 'FF->F', 'DD->D',\n", - " | 'GG->G', 'OO->O']\n", - " | \n", - " | >>> np.power.types\n", - " | ['bb->b', 'BB->B', 'hh->h', 'HH->H', 'ii->i', 'II->I', 'll->l', 'LL->L',\n", - " | 'qq->q', 'QQ->Q', 'ff->f', 'dd->d', 'gg->g', 'FF->F', 'DD->D', 'GG->G',\n", - " | 'OO->O']\n", - " | \n", - " | >>> np.exp.types\n", - " | ['f->f', 'd->d', 'g->g', 'F->F', 'D->D', 'G->G', 'O->O']\n", - " | \n", - " | >>> np.remainder.types\n", - " | ['bb->b', 'BB->B', 'hh->h', 'HH->H', 'ii->i', 'II->I', 'll->l', 'LL->L',\n", - " | 'qq->q', 'QQ->Q', 'ff->f', 'dd->d', 'gg->g', 'OO->O']\n", - "\n" - ] - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:root] *", - "language": "python", - "name": "conda-root-py" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.7" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/HappyBirthdaySophie/.ipynb_checkpoints/index-checkpoint.html b/HappyBirthdaySophie/.ipynb_checkpoints/index-checkpoint.html deleted file mode 100644 index ac541ac..0000000 --- a/HappyBirthdaySophie/.ipynb_checkpoints/index-checkpoint.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - -
- -
- diff --git a/HappyBirthdaySophie/.ipynb_checkpoints/sketch-checkpoint.js b/HappyBirthdaySophie/.ipynb_checkpoints/sketch-checkpoint.js deleted file mode 100644 index 3f61a26..0000000 --- a/HappyBirthdaySophie/.ipynb_checkpoints/sketch-checkpoint.js +++ /dev/null @@ -1,103 +0,0 @@ - -let w = 200; -let stepsize = 1; -let Nwalkers = 300; -let fr = 30; -let beta = 0.1; //beta = 0 chooses infinite temperature, beta = inf forces the walkers to go only towards the gradient -let betaslider; - -let radio; - -let cw = 500; -let canvas, src, pg; - -let walkerpos = [] - -let transparent; - - -function proposal(pos) {} - -let img; -let distfield; -function preload() { - img = loadImage('birthday.png'); - distfield = loadImage('distfield.png'); -} - -let dist, showdist, showtarget, showpaths, showwalkers; -let step; -let newpos; - -function setup() { - console.log('canvas has size: ', cw, cw); - canvas = createCanvas(cw, cw); - canvas.parent('sketch-holder'); - //pixelDensity(1); - //let d = pixelDensity(); - frameRate(fr); - - betaslider = createSlider(0, 1, 0.5, 0.0001); - //betaslider.position(10, 10); - betaslider.style('width', '80px'); - - showdist = createCheckbox('Show distance function', false); - showtarget = createCheckbox('Show target image', false); - showpaths = createCheckbox('Show paths', true); - showwalkers = createCheckbox('Show walkers', true); - - overlay = createGraphics(windowWidth, windowHeight); - overlay.pixelDensity(1); - overlay.background(color(0,0,0,0)); - - dist = function(pos) { - return distfield.get(pos.x, pos.y)[0]; - } - - colorMode(HSL); - - walkers = []; - for(let i = 0; i < Nwalkers; i += 1) { - append(walkerpos, createVector(random(width), random(height))); - } - - step = createVector(0,0); -} - -let b; -function draw() { - background(255); - if(showdist.checked()) image(distfield, 0, 0); //the min distance to the nearest non white pixel in the target image - if(showtarget.checked()) image(img, 0, 0); //the target image - if(showpaths.checked()) { - //tint(255, 5e6 / frameCount / Nwalkers); - image(overlay, 0, 0); - } - - //text(dist(createVector(mouseX, mouseY)), width/2, height/2); - //text(overlay.get(mouseX, mouseY), width/2, height/2); - - beta = betaslider.value(); - beta = beta / (1 - beta); - - overlay.loadPixels(); - for(let i = 0; i < Nwalkers; i += 1) { - //let debug = Math.sqrt((mouseX - walkerpos[i].x)**2 + (mouseY - walkerpos[i].y)**2) < 10; - step.x = 2*stepsize*(random() - 0.5); - step.y = 2*stepsize*(random() - 0.5); - newpos = p5.Vector.add(walkerpos[i], step); - let df = dist(newpos) - dist(walkerpos[i]); - if(df > 0 | exp(beta * df) > random(1.0)) { - walkerpos[i].add(step); - } - if(showwalkers.checked()) circle(walkerpos[i].x, walkerpos[i].y, 3); - - // loop over - index = 4 * (int(walkerpos[i].y) * overlay.width + int(walkerpos[i].x)); - b = overlay.pixels[index+3] + 5 - overlay.pixels[index+3] = b; - } - overlay.updatePixels(); - - -} \ No newline at end of file diff --git a/HappyBirthdaySophie/.ipynb_checkpoints/style-checkpoint.css b/HappyBirthdaySophie/.ipynb_checkpoints/style-checkpoint.css deleted file mode 100644 index a952ec5..0000000 --- a/HappyBirthdaySophie/.ipynb_checkpoints/style-checkpoint.css +++ /dev/null @@ -1,13 +0,0 @@ -html, body { - margin: 0; - padding: 0; -} - -#sketch-holder { - padding-left: 0; - padding-right: 0; - margin-left: auto; - margin-right: auto; - display: block; - width: 500px; -} diff --git a/HappyBirthdaySophie/birthday.png b/experiments/HappyBirthdaySophie/birthday.png similarity index 100% rename from HappyBirthdaySophie/birthday.png rename to experiments/HappyBirthdaySophie/birthday.png diff --git a/HappyBirthdaySophie/compute_distance_field.ipynb b/experiments/HappyBirthdaySophie/compute_distance_field.ipynb similarity index 100% rename from HappyBirthdaySophie/compute_distance_field.ipynb rename to experiments/HappyBirthdaySophie/compute_distance_field.ipynb diff --git a/HappyBirthdaySophie/distfield.png b/experiments/HappyBirthdaySophie/distfield.png similarity index 100% rename from HappyBirthdaySophie/distfield.png rename to experiments/HappyBirthdaySophie/distfield.png diff --git a/HappyBirthdaySophie/index.html b/experiments/HappyBirthdaySophie/index.html similarity index 100% rename from HappyBirthdaySophie/index.html rename to experiments/HappyBirthdaySophie/index.html diff --git a/HappyBirthdaySophie/p5.js b/experiments/HappyBirthdaySophie/p5.js similarity index 100% rename from HappyBirthdaySophie/p5.js rename to experiments/HappyBirthdaySophie/p5.js diff --git a/HappyBirthdaySophie/sketch.js b/experiments/HappyBirthdaySophie/sketch.js similarity index 100% rename from HappyBirthdaySophie/sketch.js rename to experiments/HappyBirthdaySophie/sketch.js diff --git a/HappyBirthdaySophie/style.css b/experiments/HappyBirthdaySophie/style.css similarity index 100% rename from HappyBirthdaySophie/style.css rename to experiments/HappyBirthdaySophie/style.css