我在下面有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行,并将它们附加到每行的相应数组。请帮忙,这太难了!
答案 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)))
可能是您正在寻找的。 p>
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)