Python/Numpy:数组除法

5 投票
2 回答
5275 浏览
提问于 2025-04-15 22:23

我有一些数据,存储在一个1300行和1341列的矩阵里。我想把这个矩阵分成几块(比如9块),这样我就可以逐块处理这些数据。数据需要保持顺序,比如x[0,1]要在x[0,0]的下面(或者上面,如果你喜欢的话),而且要在x[1,1]的旁边。
就像你把这些数据想象成一张图片,你可以在这张图片上画两条竖线和两条横线,把它分成9个部分。

如果我用numpy的reshape方法(比如matrix.reshape(9,260,745)或者其他组合的9,260,745),这样做并不能得到我想要的结构,因为之前提到的顺序就丢失了……

我是不是误解了reshape这个方法,还是说可以用这种方式实现?

还有什么其他的python/numpy方法可以做到这一点呢?

2 个回答

2

reshape,简单来说,就是给一个数组换个形状,但不改变里面的数据。

换句话说,它不会移动数组里的数据,只是改变数组的维度

而你似乎需要的是切片,再引用一下:

你可以通过切片和步长来提取出维度相同但大小不同的数组。切片和步长的用法和列表、元组是一样的,只不过它们可以应用于多个维度。

举个例子,thearray[0:260, 0:745] 是“左上角的部分”,thearray[260:520, 0:745] 是“左中间的部分”,依此类推。你可以把这些不同的部分放在一个列表里(或者用字典和合适的键),这样就可以单独处理它们。

5

听起来你需要用到 numpy.split() 这个函数,它的说明文档可以在 这里 找到……或者你也可以试试它的兄弟函数 numpy.array_split(),说明文档在 这里。这两个函数都是用来把一个数组分成相等的小部分,而不会像 reshape 那样重新排列数字。

我没有测试过这个,但像下面这样的代码:

numpy.array_split(numpy.zeros((1300,1341)), 9)

应该可以解决你的问题。

撰写回答