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 yare 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