如何在numpy中不使用显式数值参数完成矩阵reshape重塑操作
实现方法
你可以通过以下两种方案替换硬编码的reshape参数:
- 方案1:基于输入矩阵的shape动态取值
你要的第一个维度值就是输入矩阵X的行数,可以直接从X.shape中获取:
S = S.reshape(X.shape[0], 1)
- 方案2:使用numpy内置的维度自动推断(更通用)
numpy的reshape方法支持传入-1作为占位符,程序会自动根据数组总元素数计算该位置的维度值,你只需要固定第二个维度为1即可,适配任意长度的输出数组:
S = S.reshape(-1, 1)
除了reshape之外,你也可以用新增维度的语法实现完全相同的效果,不需要写参数:
# 两种写法等价,都会把一维的S转为n行1列的二维数组 S = S[:, np.newaxis] S = S[:, None]
现有代码优化提示
你当前贴出的代码存在几处可修正的逻辑问题:
calculate_S函数的入参n、m无意义,内部重复对n赋值,且m,d2=X.shape的赋值逻辑错误,你当前能运行是因为提前在全局定义了n、m变量,优化后的函数可以简化为:
def calculate_S(X): return np.diag(np.inner(X,X))
调用时直接写S = calculate_S(X)即可,不需要传入额外参数。
2. 最后输出语句print(s)中的变量名是小写,未定义,应该改为print(S)。
内容的提问来源于stack exchange,提问作者Slavisha84
相关产品推荐
相关产品推荐

