如何使用Numpy按指定行数切割二维数组?
如何用Numpy将大型二维数组按固定行数切割为多个小数组
嘿,作为Numpy和数据分析领域的新手,你提的这个需求其实非常普遍,实现起来也很简单!下面我会结合你给出的数组,用两种直观的方法帮你完成按每n行切割的操作,以你说的每3行切割一次为例:
首先,先把你提供的大型数组转换成Numpy数组(这是操作的前提):
import numpy as np # 你的原始二维数组 arr = np.array([ [24.47590959, 148.14814815, 185.11662347, 377.92894936, 345.78146611], [24.74543137, 147.49262537, 185.7959032, 375.93984962, 346.86090878], [23.9300286, 144.6131598, 182.99098769, 376.08123355, 356.31569571], [24.68922439, 145.01160093, 181.35654697, 382.11692778, 363.30608538], [24.16976845, 142.98991921, 183.0328544, 355.68202027, 355.74528637], [23.66695856, 139.94821916, 181.78512998, 352.4539607, 348.73583261], [23.66219845, 137.08958805, 181.34010336, 345.84125886, 347.94711204], [23.53356475, 135.34546931, 179.85611511, 352.82702655, 350.32404975], [23.46866933, 136.16557734, 180.261379, 354.29583702, 366.703337], [23.46564044, 133.71665441, 179.09913137, 346.08063679, 358.48718408], [23.65184484, 135.34546931, 178.30079344, 354.79865177, 352.0506953], [22.55961378, 136.23050201, 176.41351328, 358.93754487, 342.52440486], [22.34936528, 135.92496942, 177.65144786, 362.84470247, 344.64931932], [22.6072999, 137.04262025, 176.64723547, 361.20642947, 347.82608696], [22.2585779, 133.32444504, 174.77934108, 357.97386791, 329.97855139], [21.62162162, 128.09017548, 173.05529117, 360.94567768, 333.05578684], [21.40983782, 128.44390213, 178.57142857, 370.64492216, 328.19166393], [20.8040776, 127.4941034, 182.34865062, 369.07178446, 333.72267646], [20.83333333, 127.9590531, 186.06381989, 386.32412594, 325.99837001], [20.08475768, 129.11555842, 184.55292055, 380.22813688, 315.95576619], [19.86531318, 128.86597938, 186.75880101, 377.71482531, 309.78934325], [20.47564933, 130.76168683, 189.35807612, 374.25149701, 321.64683178], [20.25090876, 127.68945924, 189.5195679, 391.38943249, 332.55736615] ])
方法一:循环切片(直观易懂,适合新手)
这种方法通过循环遍历数组的行索引,每次截取n行的子数组,非常容易理解:
n = 3 # 每3行切割一次 split_chunks = [] # 从0开始,步长为n,遍历所有行索引 for i in range(0, arr.shape[0], n): # 截取从i到i+n的行(如果剩余行数不足n,会自动取到最后一行) chunk = arr[i:i+n] split_chunks.append(chunk) # 打印每一个切割后的小数组(和你预期的效果一致) print(chunk) print("---")
运行后,你会得到和你预期完全一致的输出:前3行一个块,接下来3行一个块,最后剩余的2行也会作为一个独立的块。
方法二:使用Numpy内置的array_split(简洁高效)
Numpy提供了专门的数组分割函数array_split,可以直接按指定的块数分割数组,不需要手动写循环:
n = 3 # 每3行切割一次 # 计算需要分割成多少块:向上取整总行数/n num_chunks = (arr.shape[0] + n - 1) // n # 按行分割数组(axis=0表示按行分割) split_chunks = np.array_split(arr, num_chunks, axis=0) # 遍历打印每个块 for chunk in split_chunks: print(chunk) print("---")
这个方法的优势是代码更简洁,而且Numpy内置函数的执行效率更高,适合处理非常大的数组。如果你的数组行数刚好是n的倍数,也可以用np.split替代np.array_split,效果是一样的。
内容的提问来源于stack exchange,提问作者lee.edward01
相关产品推荐
相关产品推荐

