【问题标题】:averaging elements in a matrix with the corresponding elements in another matrix (in python)将矩阵中的元素与另一个矩阵中的相应元素平均(在python中)
【发布时间】:2012-03-25 07:04:05
【问题描述】:

我有以下矩阵:

1  2  3

4  5  6

7  8  9

平方米:

2  3  4

5  6  7

8  9  10

我想将两者平均得到:

1.5  2.5  3.5

4.5  5.5  6.5

7.5  8.5  9.5

最好的方法是什么?

谢谢

【问题讨论】:

  • 如果您的问题得到回答,请将答案标记为已接受。

标签: python matplotlib


【解决方案1】:

List comprehensionszip 函数是你的朋友:

>>> from __future__ import division
>>> m1 = [[1,2,3], [4,5,6], [7,8,9]]
>>> m2 = [[2,3,4], [5,6,7], [8,9,10]]
>>> [[(x+y)/2 for x,y in zip(r1, r2)] for r1, r2 in zip(m1, m2)]
[[1.5, 2.5, 3.5], [4.5, 5.5, 6.5], [7.5, 8.5, 9.5]]

当然,numpy 包使此类计算变得非常简单:

>>> from numpy import array
>>> m1 = array([[1,2,3], [4,5,6], [7,8,9]])
>>> m2 = array([[2,3,4], [5,6,7], [8,9,10]])
>>> (m1 + m2) / 2
array([[ 1.5,  2.5,  3.5],
       [ 4.5,  5.5,  6.5],
       [ 7.5,  8.5,  9.5]])

【讨论】:

  • 啊,好吧...是的,我知道它是多么的微不足道。感谢您的洞察力。
【解决方案2】:

显而易见的答案是:

m1 = np.arange(1,10,dtype=np.double).reshape((3,3))
m2 = 1. + m1
m_average = 0.5 * (m1 + m2)
print m_average

array([[ 1.5,  2.5,  3.5],
       [ 4.5,  5.5,  6.5],
       [ 7.5,  8.5,  9.5]])

也许一种更优雅的方式(虽然可能会慢一点)是在两个数组的堆叠版本上使用numpy.mean 函数:

m_average = np.dstack([m1,m2]).mean(axis=2)
print m_average

array([[ 1.5,  2.5,  3.5],
       [ 4.5,  5.5,  6.5],
       [ 7.5,  8.5,  9.5]])

【讨论】:

    猜你喜欢
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多