I'm not sure how to explain why I want to do this but...why does this code
x = np.array([1,2,3,4]) d = np.empty((0, 4)) d = np.append(d,[x],axis=0) x[0]=8 d = np.append(d,[x],axis=0) give me this
array([[ 1., 2., 3., 4.], [ 8., 2., 3., 4.]]) while this code
x = np.array([1,2,3,4]) d = np.empty((0, 4)) d = np.append(d,[x],axis=0) x = d[0,] x[0]=8 d = np.append(d,[x],axis=0) gives me this?
array([[ 8., 2., 3., 4.], [ 8., 2., 3., 4.]]) Thanks in advance for any help here!
$\endgroup$1 Answer
$\begingroup$The issue is not with append but rather the assignment (bindings) of numpy arrays as pointers to the same location in memory.
Consider the following example
import numpy as np x = np.array([1, 2, 3, 4]) y = x y[0] = 8 print(x) One would expect that since one did not modify the array x, that the print statement would yield the output [1,2,3,4] but in fact the real output is [8,2,3,4]. The arrays x and y are indistinguishable because they are pointers and via the assignment y=x they point to the same address of memory.
I assume that in your example, pointers became shared with the command x=d[0,].
See for a more thorough discussion.
$\endgroup$1