Vofun Vofun - 7 months ago 46
Python Question

Combining 2D numpy arrays in a 3D array

(this may look a little similar to "Combining 2-d arrays to form a 3-d array" but bear with me)
I want to combine several 2D numpy arrays together in a 3D numpy array, such that each array that is added is lies on top of the ones added before, like stacking papers, so that if I have the following arrays:




array_tot would have the value (((1,1,1),(2,2,2),(3,3,3),(4,4,4)),((5,5,5),(6,6,6),(7,7,7),(8,8,8))). Pretty simple right? And similar to the question "Combining 2-d arrays to form a 3-d array." Except that the values held in array_one and array_two are pretty much unknown, and instead of their being two arrays (array_one and array_two) with two values, there's one array and a whole lot of values, made in a loop so that each time it runs, it adds the next array, sort of like this:

(note: etc refers to many more, let's say 72 more, values that I haven't listed. file refers to a list of files I have neglected to mention)

listx[50, 30, 90, etc]
listy[39, 75, 680, etc]
limit = 70
runs = 0
for runs in range(1,75):
x = listx([runs])
y = listy([runs])
runs += 1
array = sec_data[y - limit/2: y + limit/2, x - limit/2: x + l/2]

(and then whatever I would do to add array to array of arrays)

How do I keep adding arrays one by one to another array?


You should append the arrays onto a regular python list and then convert the list to a numpy array at the end:

import numpy as np
total = []
for i in range(5,15):
    thisArray = np.arange(i)
total = np.asarray(total)

That loop makes a 2D array; you'd nest loops to produce higher dimensional arrays.