Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matrix 朱莉娅:向量和列式矩阵上的函数有共同的风格吗?_Matrix_Vector_Julia - Fatal编程技术网

Matrix 朱莉娅:向量和列式矩阵上的函数有共同的风格吗?

Matrix 朱莉娅:向量和列式矩阵上的函数有共同的风格吗?,matrix,vector,julia,Matrix,Vector,Julia,例如,计算每个列向量的平均值和标准偏差的函数 对于矢量: function meanstd(x::Vector) len = length(x) m = 0 m2 = 0 for i = 1:len m += x[i] m2 += x[i]*x[i] end s = sqrt.((m2 - m.*m./len)./(len-1)) m /= len m, s end 对于矩阵: function m

例如,计算每个列向量的平均值和标准偏差的函数

对于矢量:

function meanstd(x::Vector)
    len = length(x)
    m = 0
    m2 = 0
    for i = 1:len
        m += x[i]
        m2 += x[i]*x[i]
    end
    s = sqrt.((m2 - m.*m./len)./(len-1))
    m /= len
    m, s
end
对于矩阵:

function meanstd(x::Matrix)
    len, d2 = size(x)
    m = zeros(d2)
    m2 = zeros(d2)
    for j=1:d2
        for i = 1:len
            m[j] += x[i,j]
            m2[j] += x[i,j]*x[i,j]
        end
    end
    s = zeros(d2)
    for j = 1:d2
        s[j] = sqrt.((m2[j] - m[j].*m[j]./len)./(len-1))
        m[j] /= len
    end
    m, s
end
如何编写两种类型都具有通用语法的唯一快速函数

UPD:

trailingsize
函数(
import Base.trailingsize
)给出数组下一个维度的大小,即使该维度不存在

ndims(v)
函数给出维度总数

对于矩阵的向量和列,此特定函数可概括如下(但其输出类型始终为数组,如果是一个数字,则为事件):


function meanstd(x::Array{T}),我在这方面不是专家,但我怀疑答案在第75行。(这是
mean
Base
中对抽象数组和执行操作的数组区域的
mean
的实现——如果我有更多的时间,我会尝试解决它,因为我对自己感兴趣!)Sairus不太清楚你的意思,但是
maplast(f,x)=挤压(mapslices(f,x,1),怎么样
?如果问题是关于样式,我认为惯例是让数组参数后跟一个标量维度或一个要操作的维度列表,返回一个大小至少与剩余维度对应的结构(请参见前面注释中的
mapslices
)。一个语言无关的注释,我建议在尝试实现某些东西之前阅读有关数值稳定性的内容。我不是这方面的专家,但我怀疑答案在第75行。(这是
mean
Base
中对抽象数组和执行操作的数组区域的
mean
的实现——如果我有更多的时间,我会尝试解决它,因为我对自己感兴趣!)Sairus不太清楚你的意思,但是
maplast(f,x)=挤压(mapslices(f,x,1),怎么样
?如果问题是关于样式,我认为惯例是让数组参数后跟一个标量维度或一个要操作的维度列表,返回一个大小至少与剩余维度对应的结构(请参见前面注释中的
mapslices
)。一个语言无关的注释,我建议在尝试实现某些东西之前先阅读有关数值稳定性的内容。
function meanstd(x::Array{T}) where T<:Real
    len = size(x,1)
    d2 = ndims(x) == 1 ? 1 : size(x,2);
    s = zeros(1, d2)
    m = zeros(1, d2)
    m2 = zeros(1, d2)
    for j=1:d2
        for i = 1:len
            m[j] += x[i,j]
            m2[j] += x[i,j]*x[i,j]
        end
    end
    for j = 1:d2
        s[j] = sqrt.((m2[j] - m[j].*m[j]./len)./(len-1))
        m[j] /= len
    end
    m, s
end