gpt4 book ai didi

python - 如何 : (1) making a copy of a numpy array, (2) 修改此副本,以及 (3) 返回修改后的副本

转载 作者:行者123 更新时间:2023-12-01 04:38:54 24 4
gpt4 key购买 nike

我的目标是编写一个函数,该函数(1)创建 numpy 数组的副本,(2)修改此副本,以及(3)返回修改后的副本。然而,这并没有像我想象的那样工作......

为了展示一个简单的示例,我们假设我有一个简单的 z 分数标准化函数:

def standardizing1(array, columns, ddof=0):

ary_new = array.copy()
if len(ary_new.shape) == 1:
ary_new = ary_new[:, np.newaxis]

return (ary_new[:, columns] - ary_new[:, columns].mean(axis=0)) /\
ary_new[:, columns].std(axis=0, ddof=ddof)

结果正是我所期望的:

>>> ary = np.array([[1, 10], [2, 9], [3, 8], [4, 7], [5, 6], [6, 5]])
>>> standardizing1(ary, [0, 1])

array([[-1.46385011, 1.46385011],
[-0.87831007, 0.87831007],
[-0.29277002, 0.29277002],
[ 0.29277002, -0.29277002],
[ 0.87831007, -0.87831007],
[ 1.46385011, -1.46385011]])

但是,假设我想返回副本的修改版本。我想知道为什么它不起作用。例如,

def standardizing2(array, columns, ddof=0):

ary_new = array.copy()
if len(ary_new.shape) == 1:
ary_new = ary_new[:, np.newaxis]

ary_new[:, columns] = (ary_new[:, columns] - ary_new[:, columns].mean(axis=0)) /\
ary_new[:, columns].std(axis=0, ddof=ddof)

# some more processing steps with ary_new
return ary_new


>>> ary = np.array([[1, 10], [2, 9], [3, 8], [4, 7], [5, 6], [6, 5]])
>>> standardizing2(ary, [0, 1])

array([[-1, 1],
[ 0, 0],
[ 0, 0],
[ 0, 0],
[ 0, 0],
[ 1, -1]])

但是如果我将它分配给一个新数组,而不进行“切片”,它会再次工作

def standardizing3(array, columns, ddof=0):

ary_new = array.copy()
if len(ary_new.shape) == 1:
ary_new = ary_new[:, np.newaxis]

some_ary = (ary_new[:, columns] - ary_new[:, columns].mean(axis=0)) /\
ary_new[:, columns].std(axis=0, ddof=ddof)

return some_ary


>>>> ary = np.array([[1, 10], [2, 9], [3, 8], [4, 7], [5, 6], [6, 5]])
>>> standardizing3(ary, [0, 1])

array([[-1.46385011, 1.46385011],
[-0.87831007, 0.87831007],
[-0.29277002, 0.29277002],
[ 0.29277002, -0.29277002],
[ 0.87831007, -0.87831007],
[ 1.46385011, -1.46385011]])

最佳答案

当你这样做时

ary = np.array([[1, 10], [2, 9], [3, 8], [4, 7], [5, 6], [6, 5]])

您创建一个整数数据类型的数组。这意味着

ary_new = array.copy()

也是一个整数数据类型的数组。它不能容纳 float ;当您尝试将 float 放入其中时:

ary_new[:, columns] = ...

它们会自动转换为整数。

如果您想要一个 float 数组,则必须在创建数组时指定:

ary_new = array.astype(float)

关于python - 如何 : (1) making a copy of a numpy array, (2) 修改此副本,以及 (3) 返回修改后的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31174581/

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