如何比较两个矩阵的每个元素

时间:2020-09-17 14:40:43

标签: python matrix compare

我想比较两个具有相同维度的矩阵的每个元素。我想知道,第一个矩阵中的一个元素是否小于第二个矩阵中具有相同索引的另一个。我想用第一个矩阵的值填充第三个矩阵,但是适用我的条件的每个条目都应为0。下面我将展示我的方法:

a = ([1, 2, 3], [3, 4, 5], [5, 6, 7])
b = ([2, 3, 1], [3, 5, 4], [4, 4, 4])

c = np.zeros(a.shape)

for i, a_i in enumerate(a):
    a_1 = a_i
    for i, b_i in enumerate(b):
        b_1 = b_i
        if a_1 < b_1:
            c[i] = 0
        else:
            c[i] = a_1

如果在这里犯了任何简单的错误,我感到非常抱歉,但是我是python和SO的新手。我找到了一些有关如何查找匹配条目的文章,但我不知道是否有解决方案可以在其中使用该方法。感谢您的帮助,谢谢。

2 个答案:

答案 0 :(得分:0)

就个人而言,我发现仅使用索引就更容易遍历矩阵:

a = ([1, 2, 3], [3, 4, 5], [5, 6, 7])
b = ([2, 3, 1], [3, 5, 4], [4, 4, 4])

c = ([0, 0, 0], [0, 0, 0], [0, 0, 0])

for i in range(len(a)):
    for j in range(len(a[0])):
        if a[i][j] < b[i][j]:
            c[i][j] = 0
        else:
            c[i][j] = a[i][j]
            

如果使用索引在a和b之间循环,则可以访问c中的相同位置。

  • i索引跟踪您所在的列表(即a中索引0处的列表是[1、2、3],b中索引0处的列表是[2、3、1])。
  • j索引跟踪您位于每个列表的哪个元素上(即a中索引0处的列表中的元素0为1,b中索引0处的列表中的元素0为2)。

这样,您可以直接访问3个矩阵中任何一个的任何元素。另外,由于c中的每个元素都从0开始,因此当a中的元素小于b中的元素时,您无需将其重新分配为0,因此可以简化if / else语句,只需执行

if a[i][j] >= b[i][j]:
    c[i][j] = a[i][j]

希望这会有所帮助!

答案 1 :(得分:0)

我真的很喜欢您的解决方案和反馈,非常感谢您!

但是,在此期间,我自己找到了一个解决方案(我将只键入使用的循环):

for i, a_i in enumerate(a):
    a_1 = a_i
    c = a_1
    for i, b_i in enumerate(b):
        b_1 = b_i
        c[np.where(c < b_1)] = np.nan

您说什么是更快的计算解决方案?

相关问题