Numpy 从数组中提取矩阵数组的最合适方法

Numpy 从数组中提取矩阵数组的最合适方法,numpy,numpy-ndarray,Numpy,Numpy Ndarray,numpy的新用户。我有一个问题,我没有找到一个不涉及原始循环的解决方案 我有一个大小为N*M的一维数组。每个大小为M的块由一个平面矩阵和一些附加值组成。我想提取Those矩阵 对于这个例子,让我们考虑一个1D数组形式: [a1 b1 c1 d1 e1 f1 g1 a2 b2 c2 d2 e2 f2 g2 .... aN bN cN dN eN fN gN] 构建以下N 2*2矩阵数组的最优雅和/或最有效的方法是什么: [[[a1,b1], [c1,d1]], [[a2,b2], [

numpy的新用户。我有一个问题,我没有找到一个不涉及原始循环的解决方案

我有一个大小为N*M的一维数组。每个大小为M的块由一个平面矩阵和一些附加值组成。我想提取Those矩阵

对于这个例子,让我们考虑一个1D数组形式:

[a1 b1 c1 d1 e1 f1 g1 a2 b2 c2 d2 e2 f2 g2 .... aN bN cN dN eN fN gN]
构建以下N 2*2矩阵数组的最优雅和/或最有效的方法是什么:

[[[a1,b1],
  [c1,d1]],
 [[a2,b2],
  [c2,d2]],
 ....
 [[aN,bN],
  [cN,dN]]]
请注意,e1 f1 g1已被丢弃

作为一个具体的例子,请考虑:

import numpy as np
x = np.array([0,1,2,3,-1,-1,-1
              0,1,2,3,-1,-1,-1])

预期结果应为包含两个矩阵[[0,1],[2,3]]的数组。

一个简单的重塑示例,后跟一个切片:

In [219]: x = np.arange(6)                                                      
In [220]: np.reshape(x,(2,3))                                                   
Out[220]: 
array([[0, 1, 2],
       [3, 4, 5]])
In [221]: np.reshape(x,(2,3))[:,:2]                                             
Out[221]: 
array([[0, 1],
       [3, 4]])

一种解决方案似乎是使用
as_-stripped
功能

b
为块大小,以下操作有效:

y = np.lib.stride_tricks.as_strided(x, shape=(x.size // b,2,2),
                                    strides=(x.strides[0]*b,
                                             x.strides[0]*2,
                                             x.strides[0]))
例如:

>>> import numpy as np
>>> x = np.array([0,1,2,3,-1,-1,-1,
...               0,1,2,3,-1,-1,-1,
...               0,1,2,3,-1,-1,-1])
>>> b = 7
>>> y = np.lib.stride_tricks.as_strided(x, shape=(x.size // b,2,2),
...                                         strides=(x.strides[0]*b,
...                                                  x.strides[0]*2,
...                                                  x.strides[0]))
>>> print(y)
[[[0 1]
  [2 3]]

 [[0 1]
  [2 3]]

 [[0 1]
  [2 3]]]
如果有更好的解决方案,请告诉我;
感谢hpaulj花时间提供帮助。

np.重塑(arr,(-1,2,2))为您做了什么?似乎不起作用。请参见示例。尝试重塑的一些变化,并在早上给我们打电话!您可能还需要从生成的数组中获取一部分。我没有找到跳过e0、f0等的方法。。。也许我遗漏了一些有用的特性…我的缺点是,我只是理解我过于简化了我的示例,所以你的答案是可以的,但不符合我的需要。我已经编辑了我的问题…我不知道你需要什么。这些例子没有多少共同之处。