首页 > 解决方案 > 为什么将切片的 numpy 数组分配给另一个变量会继续切片?

问题描述

我一直在使用 numpy 数组遇到一些奇怪的行为。考虑下面的代码:

import numpy as np

# 1
a = [np.arange(16)]
b = a
print(f'b = {b}')

# 2
b[0] = a[0][::2]
print(f'b = {b}')

# 3
b[0] = a[0][::2]
print(f'b = {b}')
b = [array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15])]
b = [array([ 0,  2,  4,  6,  8, 10, 12, 14])]
b = [array([ 0,  4,  8, 12])]

我希望b第 2 节中的内容与第 3 节中的内容相同b,但由于某种原因,它似乎有所不同。当 1D 数组时,这似乎不会发生a- 写入b = a[::2]两次会为b. 为什么在a2D 数组时会发生这种情况?

标签: pythonarraysnumpyvariables

解决方案


在您的代码中,您给出了b = a Sob只是对a. 每次更改 的值时b,也会更改 的值a。有关分配与复制与深复制的更多详细信息,请参阅此链接

b[0] = a[0][::2]

上面的代码要求 b 跳过b(ab) 的值。因此,每次您这样做时,都会进一步减少它。

如果要复制,请使用

b = a.copy()

或者

b = a[::]

推荐阅读