gpt4 book ai didi

python - 编写函数以处理向量和矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 12:50:48 24 4
gpt4 key购买 nike

作为更大函数的一部分,我正在编写一些代码来生成一个向量/矩阵(取决于输入),其中包含输入向量/矩阵“x”的每一列的平均值。这些值存储在与输入向量形状相同的向量/矩阵中。

我的初步解决方案让它在一维和矩阵数组上工作非常(!)困惑:

# 'x' is of type array and can be a vector or matrix.
import scipy as sp
shp = sp.shape(x)
x_mean = sp.array(sp.zeros(sp.shape(x)))

try: # if input is a matrix
shp_range = range(shp[1])
for d in shp_range:
x_mean[:,d] = sp.mean(x[:,d])*sp.ones(sp.shape(z))
except IndexError: # error occurs if the input is a vector
z = sp.zeros((shp[0],))
x_mean = sp.mean(x)*sp.ones(sp.shape(z))

来自 MATLAB 背景,这就是它在 MATLAB 中的样子:

[R,C] = size(x);
for d = 1:C,
xmean(:,d) = zeros(R,1) + mean(x(:,d));
end

这适用于向量和矩阵,没有错误。

我的问题是,如何在没有(丑陋的)try/except block 的情况下让我的 python 代码同时处理向量和矩阵格式的输入?

谢谢!

最佳答案

对于均值计算本身,您不需要区分向量和矩阵 - 如果您使用 axis 参数,Numpy 将沿着向量(对于向量)或列(对于矩阵)执行计算).然后构建输出,你可以使用一个很好的老式列表推导式,尽管对于巨大的矩阵来说它可能有点慢:

import numpy as np
m = np.mean(x,axis=0) # For vector x, calculate the mean. For matrix x, calculate the means of the columns
x_mean = np.array([m for k in x]) # replace elements for vectors or rows for matrices

使用列表推导式创建输出很慢,因为它必须分配两次内存——一次用于列表,一次用于数组。使用 np.repeatnp.tile 会更快,但对于向量输入来说很有趣——输出将是一个嵌套矩阵,每行有一个 1 长向量。如果速度比优雅更重要,你可以用这个替换最后一行,如果:

if len(x.shape) == 1:
x_mean = m*np.ones(len(x))
else:
x_mean = np.tile(m, (x.shape[1],1))

顺便说一句,您的 Matlab 代码对于行向量和列向量的行为不同(尝试使用 xx' 运行它)。

关于python - 编写函数以处理向量和矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8540568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com