Python中的数组组织

时间:2017-04-24 23:50:23

标签: python arrays numpy matrix while-loop

我在下面有python代码:

ht_24 = []
ht_23 = []
ht_22 = []
...

all_arr = [ht_24, ht_23, ht_22, ht_21, ht_20, ht_19, ht_18, ht_17, ht_16, ht_15, ht_14, ht_13, ht_12, ht_11, ht_10, ht_09, ht_08, ht_07, ht_06, ht_05, ht_04, ht_03, ht_02, ht_01]    

i = 0                                         
j = 0                                         
while i < 24:                                 
    while j < 24864:                          
        all_arr[i].append(read_matrix[j+i])   
        j += 24                               
        print(j)                              
    i += 1                                    
    print(i)

其中read_matrix是形状24864,17的数组。

我想从不同的起始索引(0-24)读取每24行,并将它们附加到每行的相应数组。请帮忙,这太难了!

3 个答案:

答案 0 :(得分:1)

Python要学习的两件事:

ONE: for 循环 - 当你提前知道你经历循环的次数。您上面的 while 循环都属于此类型。请尝试这些:

for i in range(24):
    for j in range(0, 24864, 24):
        all_arr[i].append(read_matrix[j+i])
        print(j)
    print(i)

当你让语言为你处理索引值时,这会更好。

TWO:列表推导:在列表构造中有一个 for 循环。您发布的整个代码可以转换为单个语句:

all_arr = [[read_matrix[j+i] \
                for j in range(0, 24864, 24) ] \
            for i in range(24) ]

答案 1 :(得分:0)

您的问题有点不清楚,但我认为

list(zip(*zip(*[iter(read_matrix)]*24)))

可能是您正在寻找的。

list(zip(*zip(*[iter(range(24864))]*24)))[0][:5]

以上只是看索引,第一个子列表的前几个元素是

(0, 24, 48, 72, 96)

答案 2 :(得分:0)

numpy库能做你想做的吗?

import numpy as np
# 24864 row, 17 columns
read_matrix = np.arange(24864*17).reshape(24864,17)
new_matrices = [[] for i in range(24)] 

for i in range(24):
    # a has 17 columns
    a = read_matrix[slice(i,None,24)]
    new_matrices[i].append(a)