首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据过程匹配字段中的值,然后将每对值写入新行?

如何根据过程匹配字段中的值,然后将每对值写入新行?
EN

Stack Overflow用户
提问于 2021-04-26 00:34:12
回答 1查看 23关注 0票数 1

我尝试使用一个矩阵,并在一行中为彼此分配两个值​​。我将每一对都分配到一个新的行。我从矩阵的底部开始分配对。第一对是倒数第二行的第一个数字,最后一行的最后一个数字。第二行是第一行,下面一行中的第二个数字。然后是同一行中的第一个数字和最后一行中的第三个数字。然后用这种方式来检查所有的数字。在下面的示例中可以更好地看到这一点

示例1

代码语言:javascript
复制
13 14 15
22 23 24
31 32 33

最好看看这个矩阵中的数字赋值,以便理解首先我赋值22到23。然后我转到下一列,从第一个数字到最后一个数字开始赋值。所以我用23连接13,然后用33连接13,然后用33连接23,所以我继续到矩阵的末尾

代码语言:javascript
复制
      13 14 15
   22 23 24
31 32 33

22 32
13 23
13 33
23 33
14 24

示例2

代码语言:javascript
复制
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,等等。

代码语言:javascript
复制
         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

如果你问如何得到这种形式的矩阵,那么

想象一个矩阵

代码语言:javascript
复制
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35

我确定行-n​​中的值列数-b

公式是

代码语言:javascript
复制
n-b + 1 = 5-3 + 1 = 3

结果3是每行中指定数量的值​​

公式的结果

代码语言:javascript
复制
      13 14 15
   22 23 24
31 32 33

但是我已经解决了矩阵的这个修改。我展示这个只是为了让情况更接近和理解。

我尝试对角线分配数字,但我的尝试仅适用于4x3矩阵,您可以在我的实验中看到这一点

我的尝试

代码语言:javascript
复制
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])

结果

代码语言:javascript
复制
[[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]]

对于不同大小的数组,它会抛出一个数组大小错误

代码语言:javascript
复制
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]])

结果

代码语言:javascript
复制
IndexError: index 6 is out of bounds for axis 1 with size 6

有没有人能帮我解决这个问题,使它成为一个更全面的解决所有矩阵大小和泛化的方法?

EN

回答 1

Stack Overflow用户

发布于 2021-04-26 01:09:39

如果我们再次查看结果,基本上我们是在获取一个diagonal,并找到所有的2 number selection combination

以你的last array为例,以照片中的任何对角线为例,你会得到上面的逻辑

代码:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
(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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67255780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档