我希望返回一个矩阵,该矩阵是另一个矩阵的连续列的平均值,但是第一列是输入矩阵的第一列与平均值之间的平均值。
我能够通过以下代码实现它,但我相信这不是解决此问题的最有效方法。
import numpy as np
a = np.matrix([[ 0.6,1.2,1.8,2.4,3],[0.8,1.6,2.4,3.2,4]])
matrix_resultado = numpy.zeros(shape=a.shape) #Same shape resulting matrix
matrix_resultado[:,[0]] = ((1+a[:,0])/2) #First column average
#loop to calculate the average between the columns
for n in range(1,5):
matrix_resultado[:,[n]] = ((a[:,(n-1)]+a[:,n])/2)
matrix_resultado
array([[ 0.8, 0.9, 1.5, 2.1, 2.7],
[ 0.9, 1.2, 2. , 2.8, 3.6]])
获得相同结果的最有效方法是什么?
答案 0 :(得分:3)
方法#1:这是一种方法 -
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src='./index.js'>
</script>
</head>
<body>
<h1></h1>
<p></p>
<div>
<form id="userRequest">
Mac Address: <input type="text" id="MacAddress"><br>
<input type="button" onclick="storeMacAddress();" value="Save Mac Address">
</form>
</div>
<button onclick="
testVariable(userMac);
">Test</button>
</body>
</html>
方法#1-S:为避免连接,我们可以从输入数组开始,然后就地执行那些平均步骤,如下所示 -
In [14]: col0_avg = (a[:,0,None] + 1)/2
In [15]: avg = (a[:,1:] + a[:,:-1])/2
In [16]: np.c_[col0_avg, avg]
Out[16]:
matrix([[ 0.8, 0.9, 1.5, 2.1, 2.7],
[ 0.9, 1.2, 2. , 2.8, 3.6]])
方法#2:使用out = a.copy()
out[:,1:] += a[:,:-1]
out[:,0] += 1
out /= 2
-
uniform-filter
运行时测试 -
In [35]: from scipy.ndimage.filters import uniform_filter1d as unif1d
In [150]: unif1d(a,size=2, axis=1, mode='constant', cval=1.0)
Out[150]:
array([[ 0.8, 0.9, 1.5, 2.1, 2.7],
[ 0.9, 1.2, 2. , 2.8, 3.6]])