本文主要是介绍基于Python实现矩阵数据的按列求和计算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
下午在功能开发的时候遇上一个小功能点的实现过程中需要对矩阵数据按列求和计算,输出一维的列表数据,有点像是神经网络模型里面的Flatten一样,这里实现是很简单的,在实现的时候我突然涌现出来了一个有趣的想法,除了我自己的实现方式以外还有哪些实现方式呢?那种方式最简洁呢?
抱着这样的想法,我构想了一下然后一共想到了4种实现方式,这里一并给出来,如下:
#!usr/bin/env python
# encoding:utf-8
from __future__ import division"""
功能: 矩阵按列求和
"""import numpy as npdef generate_random_matrix(rows, cols, min_value, max_value, seed=None):"""生成一个指定大小、最小值和最大值的随机矩阵。:param rows: 矩阵的行数:param cols: 矩阵的列数:param min_value: 随机数生成的最小值:param max_value: 随机数生成的最大值:param seed: 随机数生成的种子,如果提供,则每次生成相同的矩阵:return: 一个包含随机数的矩阵"""if seed is not None:np.random.seed(seed) # 设置随机数种子return np.random.randint(min_value, max_value + 1, size=(rows, cols))def func1(matrix):"""使用循环和列表解析"""res_list = [sum(col) for col in zip(*matrix)]return res_listdef func2(matrix):"""使用numpy库"""res_list = np.sum(matrix, axis=0)return res_list.tolist()def func3(matrix):"""使用zip函数和列表解析"""tmp_list = [matrix[i] for i in range(len(matrix))]res_list = [sum(col) for col in zip(*tmp_list)]return res_listdef func4(matrix):"""column_stack"""res_list = np.column_stack(matrix).sum(axis=1)return res_list.tolist()if __name__ == "__main__":matrix = generate_random_matrix(5, 5, 1, 10, seed=1)print(matrix)print("================================func1================================")print(func1(matrix))print("================================func2================================")print(func2(matrix))print("================================func3================================")print(func3(matrix))print("================================func4================================")print(func4(matrix))
测试效果如下:
[[ 6 9 10 6 1][ 1 2 8 7 10][ 3 5 6 3 5][ 3 5 8 8 10][ 2 8 1 7 10]]
================================func1================================
[15, 29, 33, 31, 36]
================================func2================================
[15, 29, 33, 31, 36]
================================func3================================
[15, 29, 33, 31, 36]
================================func4================================
[15, 29, 33, 31, 36]
[Finished in 0.9s]
如果大家有更多的方法也欢迎评论区留言哈,我一并汇总进来。
这篇关于基于Python实现矩阵数据的按列求和计算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!