我是Python新手。所以我想用循环来完成这件事,而不需要用到一些花哨的东西,比如发电机。我有两个2D数组,一个整数数组,另一个字符串数组,如下所示:
partition[*][0]即第一列是一个标签。对于A组,1、2和4是我需要从dataset2d获取并应用公式的行号。这意味着我将读取1,进入dataset2d中的第1行,读取第一列值即dataset2d[1][0],然后从partition2d读取2,转到dataset 2d的第2行,并读取第一列即dataset2d[2][0]。同样,下一篇我将阅读dataset2d[4][0]。
然后,我将进行一些计算,获取一个值并将其存储在一个2D列表中,然后转到dataset2d中的下一列处理这些行。因此,在本例中,下一列读取的值将是dataset2d[1][1]、dataset2d[2][1]、dataset2d[4][1]。然后再做一些计算,得到该列的一个值,存储它。我将这样做,直到我到达dataset2d的最后一栏。
partition2d中的下一行是[B, 3, 5]。所以我先从dataset2d[3][0],dataset2d[5][0]开始。获取该列的值是一个公式。然后是真正的dataset2d [3][1],dataset2d[5][1]等,直到我到达最后一栏。我会这样做,直到读取partition2d中的所有行为止。我试过的是:
for partitionRow in partition2d:
for partitionCol in partitionRow:
for colDataset in dataset2d:
print dataset2d[partitionCol][colDataset] 我面临的问题是:
Update1:
我从文本文件中读取内容,二维列表中的数据可能会根据文件内容和大小而有所不同,但file1的结构(即dataset2d和file2 i.e partition2d )将是相同的。
Update2:因为Eric问到输出应该是什么样的。
0.842322 0.94322 0.34232 0.900009 (For A)
0.642322 0.44322 0.24232 0.800009 (For B)这只是一个例子,数字是由我随机输入的。因此,第一个数字0.842322是将公式应用于dataset2d列0的结果,即,对于考虑了行1、2、4行的A组,dataset2dparttionCol。
第二个数字,0.94322是将公式应用到dataset2d的第1列,即考虑行1、2、4的A组的dataset2dpartitionCol。
第三个数字,0.34232是将公式应用于dataset2d列2的结果,即考虑行1、2、4的A组的dataset2dpartitionCol,类似地,我们得到0.900009。
第二行中的第一个数字,即0.642322,是将公式应用于考虑了行3、5等的组B的dataset2d (即dataset2dparttionCol )列0的结果。
发布于 2013-09-19 09:55:31
下面是使用迭代器的可扩展解决方案:
def partitions(data, p):
for partition in p:
label = partition[0]
row_indices = partition[1:]
rows = [dataset2D[row_idx] for row_idx in row_indices]
columns = zip(*rows)
yield label, columns
for label, columns in partitions(dataset2D, partitions2d):
print "Processing", label
for column in columns:
print column发布于 2013-09-19 08:44:23
partition2d是一个字符串数组,我需要跳过第一列,该列具有A、B、C等字符。
这叫做切片:
for partitionCol in partitionRow[1:]:上面的片段将跳过第一列。
for colDataset in dataset2d:已经做了你想做的事。这里没有像C++循环那样的结构。尽管你可以用一种非常平淡的方式做一些事情:
i=0
for i in range(len(dataset2d)):
print dataset2d[partitionCol][i]
i=+1这是一种非常糟糕的方法。对于数组和矩阵,我建议您不要重新发明轮子(这也是Pythonic的东西),Numpy. 查看尤其是:numpy.loadtxt
发布于 2013-09-19 08:44:38
为了解决你的问题:
我面临的问题是:
问题1可以使用切片来解决--如果您想从第二个元素迭代partition2d,那么只能迭代到for partitionCol in partitionRow[1:]。这将分割从第二个元素开始到末尾的行。
所以,就像:
for partitionRow in partition2d:
for partitionCol in partitionRow[1:]:
for colDataset in dataset2d:
print dataset2d[partitionCol][colDataset]问题2我不明白你想要什么:)
https://stackoverflow.com/questions/18889810
复制相似问题