gpt4 book ai didi

python - 行级操作有时仅在 Numpy 中有效

转载 作者:太空宇宙 更新时间:2023-11-03 20:27:15 25 4
gpt4 key购买 nike

我正在尝试在 Numpy 中创建一个函数来标准化每列中的值(转置为行)。我遇到的问题是,一些简单的操作可以工作,而其他应该也可以工作的操作却不能。

这是我正在尝试工作的示例函数。我已经评论了有效和无效的行。

def standardize(features):
for feature in features.T:
#feature = (feature - feature.mean()) / feature.std()
feature = feature*2 # <--- Doesn't work
feature *=2 # <--- works
return features

features 是一个 NxM 矩阵。

被注释掉的行是该函数工作所需的唯一一行。它对每个功能执行操作,但当我返回功能时,它只返回输入。

接下来的两个示例显示了有效的代码和无效的代码。 (注意:当我运行另一个来测试它时,我已经注释掉了一个)

我很难理解为什么一个有效而另一个无效。它们本质上不是同一件事吗?

最佳答案

在第一种情况 (feature = feature * 2) 中,您只需构造一个 numpy 数组,然后设置本地 变量feature 到新的 numpy 数组,但这并不意味着您更新 feature 最初引用的位置。

在后者中,您执行就地更新,从而更新 numpy 数组本身的切片。这相当于编写 features[i] *= 2,其中 i 是要更新的行的索引。

请注意,您将不会内联转置 numpy 数组,因为您处理的 View 是原始矩阵的转置 View 。

无论如何,通过计算每列的 meanstd 可以更有效地计算每列的 Z 分数:

def standardize(features):
return <b>(features - features.mean(axis=0))/features.std(axis=0)</b>

此外您可以使用scipy's scipy.stat.zscore [scipy-doc]这将为您完成工作。

关于python - 行级操作有时仅在 Numpy 中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57737648/

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