如何解决如何比较两个矩阵的每个元素
我想比较两个具有相同维度的矩阵的每个元素。我想知道,第一个矩阵中的一个元素是否小于第二个矩阵中具有相同索引的另一个。我想用第一个矩阵的值填充第三个矩阵,但是适用我的条件的每个条目都应为0。下面我将展示我的方法:
a = ([1,2,3],[3,4,5],[5,6,7])
b = ([2,3,1],5,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的新手。我找到了一些有关如何查找匹配条目的文章,但我不知道是否有解决方案可以在其中使用该方法。感谢您的帮助,谢谢。
解决方法
就个人而言,我发现仅使用索引就更容易遍历矩阵:
a = ([1,2,3],[3,4,5],[5,6,7])
b = ([2,3,1],5,4],[4,4])
c = ([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]
希望这会有所帮助!
,我真的很喜欢您的解决方案和反馈,非常感谢您!
但是,在此期间,我自己找到了一个解决方案(我将只键入使用的循环):
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
您说什么是更快的计算解决方案?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。