gpt4 book ai didi

python - 为什么不是数组[:] copying the array?

转载 作者:行者123 更新时间:2023-11-30 22:25:18 25 4
gpt4 key购买 nike

我最近找到了一个解决我觉得奇怪的问题的方法,并且想更好地了解情况。该问题涉及覆盖数组指定索引处的值。

import numpy as np

# create array to overwrite
mask = np.ones(10)

# first set of index-value pairs
idx_1 = [0, 3, 4]
val_1 = [100, 200, 300]

# second set of index-value pairs
idx_2 = [1, 5, 6]
val_2 = [250, 505, 650]

# third set of index-value pairs
idx_3 = [7, 8, 9]
val_3 = [900, 800, 700]

def overwrite_mask(mask, indices, values):
""" This function overwrites elements in mask with values at indices. """
mask[indices] = values
return mask

# incorrect
# res_1 = overwrite_mask(mask[:], idx_1, val_1)
# res_2 = overwrite_mask(mask[:], idx_2, val_2)
# res_3 = overwrite_mask(mask[:], idx_3, val_3)
# >> [ 100. 250. 1. 200. 300. 505. 650. 900. 800. 700.]
# >> [ 100. 250. 1. 200. 300. 505. 650. 900. 800. 700.]
# >> [ 100. 250. 1. 200. 300. 505. 650. 900. 800. 700.]

# correct
res_1 = overwrite_mask(mask.copy(), idx_1, val_1)
res_2 = overwrite_mask(mask.copy(), idx_2, val_2)
res_3 = overwrite_mask(mask.copy(), idx_3, val_3)
# [ 100. 1. 1. 200. 300. 1. 1. 1. 1. 1.]
# [ 1. 250. 1. 1. 1. 505. 650. 1. 1. 1.]
# [ 1. 1. 1. 1. 1. 1. 1. 900. 800. 700.]

我的印象是,[:] 在数组生成该数组的精确副本之后应用。但似乎 [:] 在这种情况下没有正常工作。

这里发生了什么?

最佳答案

I was under the impression that [:] applied after an array produced an exact copy of the array.

这是错误的。应用于 Python 类型实例(例如 liststr...)的 [:] 将返回一个“浅”副本,但这并不会这意味着这同样适用于 NumPy 数组。

事实上,NumPy 总是会返回 views当使用“基本切片”时。因为 [:] 是基本切片,所以它永远不会复制数组。请参阅documentation :

All arrays generated by basic slicing are always views of the original array.

关于python - 为什么不是数组[:] copying the array?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47572640/

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