我尝试使用一个矩阵,并在一行中为彼此分配两个值。我将每一对都分配到一个新的行。我从矩阵的底部开始分配对。第一对是倒数第二行的第一个数字,最后一行的最后一个数字。第二行是第一行,下面一行中的第二个数字。然后是同一行中的第一个数字和最后一行中的第三个数字。然后用这种方式来检查所有的数字。在下面的示例中可以更好地看到这一点
示例1
13 14 15
22 23 24
31 32 33最好看看这个矩阵中的数字赋值,以便理解首先我赋值22到23。然后我转到下一列,从第一个数字到最后一个数字开始赋值。所以我用23连接13,然后用33连接13,然后用33连接23,所以我继续到矩阵的末尾
13 14 15
22 23 24
31 32 33
22 32
13 23
13 33
23 33
14 24示例2
14 15 16 17 18
23 24 25 26 27
32 33 34 35 36
41 42 43 44 45这个矩阵也是如此。首先我指定32和42,然后是23和33,23和43,33和43,等等。
14 15 16 17 18
23 24 25 26 27
32 33 34 35 36
41 42 43 44 45
32 42
23 33
23 43
33 43
14 24
14 34
14 44
24 34
24 44
34 44
15 25
15 35
15 45
25 35
25 45
35 45
16 26
16 36
26 36
17 27如果你问如何得到这种形式的矩阵,那么
想象一个矩阵
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35我确定行-n中的值列数-b
公式是
n-b + 1 = 5-3 + 1 = 3结果3是每行中指定数量的值
公式的结果
13 14 15
22 23 24
31 32 33但是我已经解决了矩阵的这个修改。我展示这个只是为了让情况更接近和理解。
我尝试对角线分配数字,但我的尝试仅适用于4x3矩阵,您可以在我的实验中看到这一点
我的尝试
import numpy as np
from itertools import combinations
a=np.array([[13,14,15,16,17,18],
[22,23,24,25,26,27],
[31,32,33,34,35,36]])
x = np.transpose(np.triu_indices(a.shape[0],1))
y = x + np.arange(-1,a.shape[1]-1)[:,None,None]
# assign edge values
y[0] = y[1][0]
y[-1] = y[-2][-1]
print(a[x,y].reshape(-1,2)[2:-2])结果
[[22 32]
[13 23]
[13 33]
[23 33]
[14 24]
[14 34]
[24 34]
[15 25]
[15 35]
[25 35]
[16 26]
[16 36]
[26 36]
[17 27]]对于不同大小的数组,它会抛出一个数组大小错误
a=np.array([[14,15,16,17,18,19],
[23,24,25,26,27,28],
[32,33,34,35,36,37],
[41,42,43,44,45,46]])结果
IndexError: index 6 is out of bounds for axis 1 with size 6有没有人能帮我解决这个问题,使它成为一个更全面的解决所有矩阵大小和泛化的方法?
发布于 2021-04-26 01:09:39
如果我们再次查看结果,基本上我们是在获取一个diagonal,并找到所有的2 number selection combination。
以你的last array为例,以照片中的任何对角线为例,你会得到上面的逻辑

代码:
import numpy as np
from itertools import combinations
a=np.array([[14,15,16,17,18,19],
[23,24,25,26,27,28],
[32,33,34,35,36,37],
[41,42,43,44,45,46]])
l = []
shape_ = a.shape
for i in range(2-shape_[0], shape_[1] ):
l += list(combinations(np.diag(a, i), 2))
for i in l:
print(i)输出:
(32, 42)
(23, 33)
(23, 43)
(33, 43)
(14, 24)
(14, 34)
(14, 44)
(24, 34)
(24, 44)
(34, 44)
(15, 25)
(15, 35)
(15, 45)
(25, 35)
(25, 45)
(35, 45)
(16, 26)
(16, 36)
(16, 46)
(26, 36)
(26, 46)
(36, 46)
(17, 27)
(17, 37)
(27, 37)
(18, 28)https://stackoverflow.com/questions/67255780
复制相似问题