如何从一组现有数组构造一个新的numpy数组?

时间:2015-06-24 23:34:17

标签: python arrays loops numpy indexing

我有12个numpy阵列,5个大小(3,121)和7个大小(3,120),排序0-11;称他们为a0,a1,...,a11。我想构建一个专门按以下方式构建的新数组:

newArray = [a0_00, a1_00, a2_00, ..., a11_00, a0_01, a1_01, ..., a11_01, a0_02...]

也就是说,我想从12个数组中的每个数组中取出第一列并按顺序将它们添加到我的新数组中,然后获取12个数组中的每个数组的第二列,以及其他数据,依此类推。 ..

我最近尝试过的只是通过整个新数组重复每个数组的前12个值,timedata ......

for i in range(len(files)):
    data = loadtxt(files[i], skiprows=4, delimiter=',').T[0:,:]
    timedata[i::12] = data[0,0]

我已尝试嵌套for循环并以不同方式索引数组但到目前为止还没有任何工作......任何想法都会非常感激。

谢谢

1 个答案:

答案 0 :(得分:0)

你基本上有一个12 x 3 x(120或121)的锯齿状阵列。如果填充a05到a11的最后一列,这将更容易一些。相反,您可以遍历从0到120的列;并遍历数组;并将列添加到新数组(如果存在)。

以下是一些示例代码。请注意,我使用了11和12的长度而不是120和121,但这个想法是一样的。

import numpy as np

np.random.seed(1000)
a01 = np.random.randint(0,10, (3,12))
a02 = np.random.randint(0,10, (3,12))
a03 = np.random.randint(0,10, (3,12))
a04 = np.random.randint(0,10, (3,12))
a05 = np.random.randint(0,10, (3,12))
a06 = np.random.randint(0,10, (3,11))
a07 = np.random.randint(0,10, (3,11))
a08 = np.random.randint(0,10, (3,11))
a09 = np.random.randint(0,10, (3,11))
a10 = np.random.randint(0,10, (3,11))
a11 = np.random.randint(0,10, (3,11))
arrayList = [a01, a02, a03, a04, a05, a06, a07, a08, a09, a10, a11]
cols = np.sum([a.shape[1] for a in arrayList])
newArray = np.zeros((3,cols))

arrIndex = 0
for i in range(12):
    for a in arrayList:
        try: 
            newArray[:,arrIndex] = a[:,i]
            arrIndex = arrIndex + 1
        except IndexError:
            pass