Bruhnke, Angelica wrote: > I'm new to python programming so this question will probably be a no > brainer for the experienced programmer. I'm trying to create a 10x10 array > of zeros and then framing it with a border of ones.
So the final array is 12x12. > > Output should look like this: > > [[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] > > [ 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.] > > [ 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.] > > [ 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.] > > [ 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.] > > [ 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.] > > [ 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.] > > [ 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.] > > [ 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.] > > [ 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.] > > [ 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.] > > [ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]] > > > > This is the code I've written: > > a = np.ones ((1,10)) > > print a > > b = np.zeros ((10,10)) > > print b > > c = np.vstack ((b,a)) > > print c > > > This is my output: > > [[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]] > [[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] > [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] > [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] > [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] > [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] > [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] > [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] > [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] > [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] > [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]] > [[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] > [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] > [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] > [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] > [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] > [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] > [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] > [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] > [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] > [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] > [ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]]? > > As you can see I have too many zeros once I stack them and don't have the > ones framing the sides vertically. > > Any guidance on where I'm going astray? Below I'm using the dimensions 4x4. To get 1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1 you can vstack() >>> np.vstack(([1,1], [[0,0],[0,0]], [1,1])) array([[1, 1], [0, 0], [0, 0], [1, 1]]) and use hstack() to add ones to the sides: >>> side = [[1]]*4 >>> np.hstack((side, mid, side)) array([[1, 1, 1, 1], [1, 0, 0, 1], [1, 0, 0, 1], [1, 1, 1, 1]]) The same with ones() and zeros(), put into a function: >>> def frame(N): ... horz = np.ones((1, N)) ... inner = np.zeros((N, N)) ... vert = np.ones((N+2, 1)) ... mid = np.vstack((horz, inner, horz)) ... return np.hstack((vert, mid, vert)) ... >>> frame(3) array([[ 1., 1., 1., 1., 1.], [ 1., 0., 0., 0., 1.], [ 1., 0., 0., 0., 1.], [ 1., 0., 0., 0., 1.], [ 1., 1., 1., 1., 1.]]) >>> frame(1) array([[ 1., 1., 1.], [ 1., 0., 1.], [ 1., 1., 1.]]) Personally I'd probably use a simpler approach. Start with all ones and then set the inner values to 0: >>> def frame2(N): ... a = np.ones((N+2, N+2)) ... a[1: -1, 1: -1] = 0 ... return a ... >>> frame2(2) array([[ 1., 1., 1., 1.], [ 1., 0., 0., 1.], [ 1., 0., 0., 1.], [ 1., 1., 1., 1.]]) _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor