如何解决如何在没有numpy的情况下沿python中列表的轴取平均值?
简而言之,我想重新创建 numPy 的 mean(axis)
函数,不使用未知形状矩阵的依赖项。 numPy 源代码几乎无法辨认,并且很难找到任何基于统计的资源,而所有 numPy 资源都淹没了它们。我知道该方法必须是递归的,因为维度元组的长度可以是任何东西,但我什至不知道从哪里开始。
解决方法
多么疯狂的问题!!!
你能解释一下这是什么类型的项目,你不能用 numpy 但你可以用 python??
def arrayItems(array,i0 = []):
try:
for i,ai in enumerate(array):
yield from arrayItems(ai,i0 + [i])
except TypeError as _:
yield i0,array
def arrayShape(array):
shape = [];
while True:
try:
axLen = 0;
for ai in array:
axLen += 1;
array = ai;
shape.append(axLen)
except TypeError:
return shape;
def arrayZeros(shape):
if len(shape) == 0:
return 0;
else:
a0 = shape[0]
shape = shape[1:]
return [arrayZeros(shape) for _ in range(a0)]
# multiply accumulate,very good instruction
def arrayAcc(array,index,a=1,b=0):
for i in index[:-1]:
array = array[i]
array[index[-1]] = a * array[index[-1]] + b;
def arrayMean(array,axis=0):
inShape = arrayShape(array)
axis = axis % len(inShape)
out = arrayZeros(inShape[:axis] + inShape[axis+1:])
for item in arrayItems(array):
index,val = item
arrayAcc(out,index[:axis] + index[axis+1:],1.0,val / inShape[axis])
return out;
简单的测试
import numpy as np
testData = np.random.randn(2,3,4,5);
for axis in range(testData.ndim):
assert(np.allclose(arrayMean(testData,axis),np.mean(testData,axis)))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。