相关疑难解决方法(0)

如何将列表拆分为大小均匀的块?

我有一个任意长度的列表,我需要将它分成相同大小的块并对其进行操作.有一些明显的方法可以做到这一点,比如保留一个计数器和两个列表,当第二个列表填满时,将它添加到第一个列表并清空下一轮数据的第二个列表,但这可能非常昂贵.

我想知道是否有人对任何长度的列表都有一个很好的解决方案,例如使用生成器.

我一直在寻找有用的东西,itertools但我找不到任何明显有用的东西.但是可能会错过它.

相关问题:在块中迭代列表的最"pythonic"方法是什么?

python split list chunks

2068
推荐指数
40
解决办法
84万
查看次数

将列表拆分为大约相等长度的N个部分

将列表划分为大致相等的部分的最佳方法是什么?例如,如果列表有7个元素并将其拆分为2个部分,我们希望在一个部分中获得3个元素,而另一个应该具有4个元素.

我正在寻找像even_split(L, n)这样的东西L分成n几部分.

def chunks(L, n):
    """ Yield successive n-sized chunks from L.
    """
    for i in xrange(0, len(L), n):
        yield L[i:i+n]
Run Code Online (Sandbox Code Playgroud)

上面的代码给出了3个块,而不是3个块.我可以简单地转置(迭代它并获取每列的第一个元素,调用第一部分,然后取第二部分并将其放入第二部分等),但这会破坏项目的顺序.

python list chunks

134
推荐指数
15
解决办法
13万
查看次数

迭代列表切片

我想要一个算法迭代列表切片.切片大小设置在功能之外,可以有所不同.

在我看来它是这样的:

for list_of_x_items in fatherList:
    foo(list_of_x_items)
Run Code Online (Sandbox Code Playgroud)

有没有办法正确定义list_of_x_items或使用python 2.5执行此操作的其他方法?


edit1:澄清 "分区"和"滑动窗口"这两个术语听起来都适用于我的任务,但我不是专家.所以我会更深入地解释这个问题并添加到问题中:

fatherList是我从文件中获取的多级numpy.array.函数必须找到系列的平均值(用户提供系列的长度)平均我正在使用该mean()函数.现在进行问题扩展:

edit2:如何修改你提供的函数来存储额外的项目,并在下一个fatherList被输入函数时使用它们?

例如,如果列表长度为10且块的大小为3,则列表的第10个成员将被存储并附加到下一个列表的开头.


有关:

python iteration loops slice

29
推荐指数
6
解决办法
2万
查看次数

Python - 随机将列表分成几乎相等的n个部分

我已经阅读了Python的答案:将列表切成n个近似等长的分区问题.

这是公认的答案:

def partition(lst, n): 
    division = len(lst) / float(n) 
    return [ lst[int(round(division * i)): int(round(division * (i + 1)))] for i in xrange(n) ]
Run Code Online (Sandbox Code Playgroud)

我想知道,为了将项目随机分配给分区而不是增量分配,如何修改这些解决方案.

谢谢,S :-)

python random slice

11
推荐指数
2
解决办法
2万
查看次数

如何在python numpy中并行化和计算?

我有一个总和,我正在尝试计算,我很难并行化代码.我试图并行化的计算有点复杂(它使用numpy数组和scipy稀疏矩阵).它吐出一个numpy数组,我想从大约1000个计算中求和输出数组.理想情况下,我会在所有迭代中保持运行总和.但是,我还没弄清楚如何做到这一点.

到目前为止,我已经尝试使用joblib的Parallel函数和pool.map函数与python的多处理包.对于这两个,我使用一个返回numpy数组的内部函数.这些函数返回一个列表,我将其转换为numpy数组,然后求和.

但是,在joblib并行函数完成所有迭代后,主程序永远不会继续运行(看起来原始作业处于挂起状态,使用0%CPU).当我使用pool.map时,在所有迭代完成后我得到内存错误.

有没有办法简单地并行化运行的数组总和?

编辑:目标是做以下的事情,除了并行.

def summers(num_iters):

    sumArr = np.zeros((1,512*512)) #initialize sum
    for index in range(num_iters):
        sumArr = sumArr + computation(index) #computation returns a 1 x 512^2 numpy array

    return sumArr
Run Code Online (Sandbox Code Playgroud)

python parallel-processing numpy sum scipy

3
推荐指数
1
解决办法
5834
查看次数

在 Python 中将范围分成 n 个相等范围的最佳方法

我有范围内的元素总数N和一些块nb

我想N分成nb最好的相等范围,只有开始编号和结束编号。例如,N=24并且nb=5应该输出:

0,5 5,10 10,15 15,20 20,24
Run Code Online (Sandbox Code Playgroud)

WhileN=28nb=5应输出:

0,5 5,10 10,16 16,22 22,28  (the rest of `N/nb` division is equally distributed on the 3 last subranges)
Run Code Online (Sandbox Code Playgroud)

基于一个评论,我有这个方法:

def partition(lst, n):
    division = len(lst) / n
    return [lst[round(division * i):round(division * (i + 1))] for i in range(n)]

def ranges(N, nb):
    return ["{},{}".format(r.start, r.stop) for r in partition(range(N), nb)]

>>> ranges(28, 5)
['0,6', '6,11', '11,17', '17,22', …
Run Code Online (Sandbox Code Playgroud)

python range divide

0
推荐指数
1
解决办法
6494
查看次数

标签 统计

python ×6

chunks ×2

list ×2

slice ×2

divide ×1

iteration ×1

loops ×1

numpy ×1

parallel-processing ×1

random ×1

range ×1

scipy ×1

split ×1

sum ×1