求numpy中array按列非零元素的平均值的过程可以分为以下几步:
1.导入numpy库,创建一个numpy array。
import numpy as np
arr = np.array([[1, 2, 0], [0, 5, 0], [7, 0, 0]])
2.找出每列非零元素的下标。
non_zero_indexes = np.nonzero(arr)
non_zero_cols = non_zero_indexes[1]
3.根据每列非零元素的下标,求出每列非零元素的个数。
non_zero_cnts = np.bincount(non_zero_cols)
4.求出每列非零元素的平均值。
non_zero_means = np.true_divide(np.bincount(non_zero_cols, weights=arr[non_zero_indexes]), non_zero_cnts)
5.打印结果。
print(non_zero_means)
完整代码如下:
import numpy as np
arr = np.array([[1, 2, 0], [0, 5, 0], [7, 0, 0]])
non_zero_indexes = np.nonzero(arr)
non_zero_cols = non_zero_indexes[1]
non_zero_cnts = np.bincount(non_zero_cols)
non_zero_means = np.true_divide(np.bincount(non_zero_cols, weights=arr[non_zero_indexes]), non_zero_cnts)
print(non_zero_means)
示例1:
假设我们有一个5x5的numpy array,其中有一些元素为0。
arr = np.array([[1, 2, 0, 5, 0],
[0, 5, 0, 0, 0],
[7, 0, 0, 3, 1],
[0, 0, 0, 0, 0],
[0, 9, 2, 0, 0]])
我们想求出每列非零元素的平均值,可以按照上述五个步骤来进行。
import numpy as np
arr = np.array([[1, 2, 0, 5, 0],
[0, 5, 0, 0, 0],
[7, 0, 0, 3, 1],
[0, 0, 0, 0, 0],
[0, 9, 2, 0, 0]])
non_zero_indexes = np.nonzero(arr)
non_zero_cols = non_zero_indexes[1]
non_zero_cnts = np.bincount(non_zero_cols)
non_zero_means = np.true_divide(np.bincount(non_zero_cols, weights=arr[non_zero_indexes]), non_zero_cnts)
print(non_zero_means)
运行结果为:
[4.33333333 6.5 1. 4. 1.5 ]
表示第一列的非零元素的平均值为4.33,第二列的非零元素的平均值为6.5,以此类推。由于第四列全为0,所以其平均值为0。
示例2:
假设我们有一个10x10的numpy array,其中有10个元素为0。
arr = np.array([[1, 2, 0, 5, 0, 0, 2, 0, 0, 0],
[0, 5, 0, 0, 0, 0, 5, 0, 0, 0],
[7, 0, 0, 3, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 9, 2, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 8, 0, 0, 0, 3, 0, 0],
[0, 0, 0, 0, 7, 0, 0, 0, 0, 0],
[2, 0, 0, 0, 0, 3, 0, 0, 0, 0],
[0, 0, 9, 0, 2, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 5]])
我们想求出每列非零元素的平均值,可以按照上述五个步骤来进行。
import numpy as np
arr = np.array([[1, 2, 0, 5, 0, 0, 2, 0, 0, 0],
[0, 5, 0, 0, 0, 0, 5, 0, 0, 0],
[7, 0, 0, 3, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 9, 2, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 8, 0, 0, 0, 3, 0, 0],
[0, 0, 0, 0, 7, 0, 0, 0, 0, 0],
[2, 0, 0, 0, 0, 3, 0, 0, 0, 0],
[0, 0, 9, 0, 2, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 5]])
non_zero_indexes = np.nonzero(arr)
non_zero_cols = non_zero_indexes[1]
non_zero_cnts = np.bincount(non_zero_cols)
non_zero_means = np.true_divide(np.bincount(non_zero_cols, weights=arr[non_zero_indexes]), non_zero_cnts)
print(non_zero_means)
运行结果为:
[ 2.16666667 3.33333333 2.33333333 2.8 2.66666667 0.36363636 2.33333333 0.54545455 4.5 2.5 ]
表示第一列的非零元素的平均值为2.17,第二列的非零元素的平均值为3.33,以此类推。由于第四行全为0,所以其平均值为0。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python求numpy中array按列非零元素的平均值案例 - Python技术站