文档章节

php 计算任意多个结构相同的多维数组的每个元素的平均值

酒逍遥
 酒逍遥
发布于 2014/01/22 11:46
字数 457
阅读 129
收藏 1

最近遇到这样一个计算需求.

有N 个结构相同的数组.

例如

$x = array(
	0=>array(1,'ab'=>array(1,2),'x'=>5),
	1=>array(2,'ab'=>array(3,4),'x'=>1),
	2=>array(3,'ab'=>array(3,4),'x'=>2),
	...
	N=>array(10,'ab'=>array(5,6),'x'=>10)
);

数组 x 中包含了 N 个结构相同的数组.这些数组也是多维数组.

但多维数组最终的元素都是数字.

现在要计算这N 个数组最终元素的平均值,并生成一个同样结构的多维数组

元素和这N 个数组结构相同,但元素的值为这N 个数组元素的平均值


比如N =3 的时候

那么生成的数组

第一个 元素的值 应该为  (1+2+3+10)/4 = 4

其他元素以此类推

最终应得到这样一个数组

array(4,'ab'=>array(3,4),'x'=>4.5)

实现原理不复杂,就是数组递归遍历,递归到最后一层时

把N个数组的元素值相加再除以N 即得到最终数组的元素值.

那么直接上代码

$x = array(
	0=>array(1,'ab'=>array(1,2),'x'=>5),
	1=>array(2,'ab'=>array(3,4),'x'=>1),
	2=>array(3,'ab'=>array(3,4),'x'=>2),
	3=>array(10,'ab'=>array(5,6),'x'=>10)
);
$c = array();
average_multip_array($x,$c,count($x));
function average_multip_array($arr1,&$arr2,$i){
	foreach($arr1[0] as $k=>$v){
		if(!is_array($v)){
			for($n=0;$n<$i;$n++){
				$arr2[$k]+=$arr1[$n][$k];
			}
			$arr2[$k]=$arr2[$k]/$i;
		}else{
			for($n=0;$n<$i;$n++){
				$tmp[$n] = &$arr1[$n][$k];
			}
			average_multip_array($tmp,$arr2[$k],$i);
		}
	}
}
var_dump($c);

 输出

array(3) {
  [0]=>
  int(4)
  ["ab"]=>
  array(2) {
    [0]=>
    int(3)
    [1]=>
    int(4)
  }
  ["x"]=>
  float(4.5)
}

里面用到的一个技巧就是数组元素的引用.可以大大简化代码量


© 著作权归作者所有

共有 人打赏支持
酒逍遥

酒逍遥

粉丝 48
博文 40
码字总数 35454
作品 0
武汉
高级程序员
私信 提问
NumPy快餐教程(2) - 多维数组进阶

NumPy快餐教程(2) - 多维数组进阶 上一讲我们介绍了ndarray的形状变化和生成方法,这一节我们继续讨论多维数组的使用方法。 访问元素 NumPy中使用[]方括号来访问元素。如果是一维数组,就用下...

阿里云云栖社区
05/17
0
0
NumPy学习笔记(2)--Array数组和矩阵基本运算

numpy还是很强大的,这里把一些矩阵基本操作做一些整理,方便大家,也方便我自己码代码的时候查找。 有句话对于我这个初学者来说觉得还是挺符合的,翻书看视频浏览教程贴啊什么的,会发现很多...

lwplwf
2017/02/17
0
0
Python科学计算工具—Numpy入门

一:前言 学了中国大学mooc的Python数据分析与展示课程感觉挺不错的,记录下来以后学习也方便多了。 NumPy是一个开源的Python科学计算基础库,包含: 1、一个强大的N维数组对象Array; 2、比...

布咯咯_rieuse
2017/07/02
0
0
1.python数据分析与展示----Numpy

1.数据的维度 一维数据:一维数据由对等关系的有序或无序数据构成,采用线性方式组织,如: 3.1413, 3.1398, 3.1404, 3.1401, 3.1349, 3.1376 对应列表、数组和集合等概念 列表和数组的区别:...

bxg1065283526
04/27
0
0
【Python】Numpy简单入门

Numpy   Numpy是Python中科学计算的核心库。Numpy提供了高性能的多维数组对象,还有用于处理这些数组的工具。   在这里给出Win10配置Python3、Numpy、PyCharm、Anaconda的方法: Python安...

u013165921
2017/12/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

什么是以太坊DAO?(二)

Decentralized Autonomous Organization,简称DAO,以太坊中重要的概念。一般翻译为去中心化的自治组织。 在上一节中,我们为了展示什么是DAO创建了一个合约,就像一个采用邀请制的俱乐部,会...

geek12345
15分钟前
0
0
全屋WiFi彻底无死角 这才是终极解决方案

无线网络现在不仅在家庭中不可或缺,在酒店、医院、学校等场景中的需求也越来越多。尤其是这些场景中,房间多但也需要每个房间都能够完美覆盖WiFi,传统的吸顶式AP就无法很好的解决问题。 H3...

linux-tao
28分钟前
1
0
Python日期字符串比较

需要用python的脚本来快速检测一个文件内的二个时间日期字符串的大小,其实实现很简单,首先一些基础的日期格式化知识如下 复制代码 %a星期的简写。如 星期三为Web %A星期的全写。如 星期三为...

dragon_tech
29分钟前
2
0
ORA 各种oraclesql错误

ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某...

青峰Jun19er
32分钟前
2
0
没错,老板让我写个 BUG!

前言 标题没有看错,真的是让我写个 bug! 刚接到这个需求时我内心没有丝毫波澜,甚至还有点激动。这可是我特长啊;终于可以光明正大的写 bug 了🙄。 先来看看具体是要干啥吧,其实主要就是...

crossoverJie
46分钟前
71
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部