python - 嵌套数组的递归元素加法以获得标量值
问题描述
我想编写一个接收数组的函数,检查接收到的数组是否是嵌套数组(可以深度嵌套)并对嵌套数组中的元素求和,然后在结果数组中添加元素,直到我得到一个标量值
data_array
[[[9.2e-05 9.4e-05 9.3e-05]
[9.3e-05 9.9e-05 9.6e-05]
[9.3e-05 9.8e-05 9.2e-05]]
[[9.03e-05 8.9e-05 9.03e-05]
[8.43e-05 8.9e-05 9.01e-05]
[7.95e-05 7.7e-05 7.21e-05]]]
Desired_output = [[9.27e-05 9.7e-05 9.36e-05] [8.43e-05 8.56e-05 8.4e-05]] -> [0.000094 0.000084] -> 0.000089
(首先元素先平均列,然后逐行添加,直到达到标量值)
1st example has 2 lists of two 2d (dim 3*3) arrays. I want to get average for each element column wise and and get 2 (1*3) arrays, then I get 1 (1*3) array which is average of two 2d (1*3) arrays. Finally with the last 1*3 array I want to sum all the elements and get the scalar value
或者
data_array
[[[[8.4e-05 8.5e-05 9.5e-05]
[8.7e-05 8.8e-05 8.8e-05]
[7.6e-05 6.8e-05 6.3e-05]]
[[8.8e-05 9.4e-05 8.8e-05]
[8.4e-05 8.9e-05 9.3e-05]
[8.1e-05 8.1e-05 7.7e-05]]]]
Desired_output = [[0.000083 8.03e-05 8.2e-05] [8.43e-05 8.8e-05 8.6e-05]] -> [8.17e-05 8.61e-05] -> 8.38e-05
(首先元素先平均列,然后逐行添加,直到达到标量值)
或者
data_array
[[[[4.77e-05]]]
[[[3.75e-05]]]
[[[2.95e-05]]]]
所需输出 -> 3.76e-05
我的原始尝试
import numpy as np
def sumOfArray(array):
sumTotal = []
for element in array:
if type(element) is list:
sumTotal += np.sum(list, axis=1)
sumTotal += sumOfArray(list)
else:
return array
return [sum(elem) for elem in sumTotal]
解决方案
递归的好应用!
请参阅以下代码以执行您想要的操作(如果数据错误,则引发异常)。numpy
如果您想避免它,则不需要:
def nested_array_to_scalar(data):
total = 0.0
for datum in data:
if isinstance(datum, (int, float)):
total += datum
elif isinstance(datum, (list, tuple)):
total += nested_array_to_scalar(datum)
else:
raise TypeError("Data must be lists or numbers in all dimensions!")
return total
编辑:您确实知道示例测试用例中的很多总和是错误的吗?
>>> 4.77e-5 + 3.75e-5 + 2.95e-5
0.0001147 # = 1.147e-4
编辑 2:如果您确实想使用numpy
,请确保将numpy
数据类型添加到isintance
args。例如
isinstance(datum, (list, tuple))
至
isinstance(datum, (list, tuple, np.array))
推荐阅读
- python - 以 10 为底的 int() 的 Python 无效文字:“开始”
- c++ - std::atomic:任务循环时内存屏障是否存在?
- javascript - React:如何从数据文件中仅导入特定的数据子集?
- git - Git:从历史中删除提交而不更改任何其他内容(日期,提交者)
- javascript - useRef 挂钩在上下文中返回 null
- java - 如何编写 SQL 来检查数据库中的数据对?
- sql - 我想更新 sql 2014 中的表记录
- asp.net - 验证未在文本框上触发
- api - OCAPI OAuth 验证
- typescript - 需要 TypeScript 数组中的特定项目