numpy-1维和2维数组的行为不同

时间:2018-11-26 10:52:02

标签: python python-3.x numpy

我正在查看一些numpy代码,并遇到了此问题。 numpy对于1维数组和2维数组表现出不同的行为。在第一种情况下,它将创建引用,而在第二种情况下,它将创建深层副本。

这是代码段

import numpy as np

# Case 1: when using 1d-array

arr = np.array([1,2,3,4,5])
slice_arr = arr[:3]  # taking first three elements, behaving like reference

slice_arr[2] = 100 # modifying the value

print(slice_arr)
print (arr) # here also value gets changed

# Case 2: when using 2d-array

arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
slice_arr = arr[:,[0,1]]  # taking all rows and first two columns, behaving like deep copy

slice_arr[0,1] = 100 # modifying the value

print(slice_arr)
print() # newline for clarity
print (arr) # here value doesn't change

有人可以解释这种现象的原因吗?

1 个答案:

答案 0 :(得分:4)

原因是您不是以相同的方式进行切片,而不是1D与2D。

slice_arr = arr[:3]

在这里,您使用的是切片运算符,因此numpy可以查看原始数据并将其返回。

slice_arr = arr[:,[0,1]]

在这里,您使用的是所需元素的列表,它不是一个切片(即使可以用切片表示),在这种情况下,numpy返回一个副本。

所有这些都是吸气剂,因此它们可以返回视图或副本。

对于设置方法,它总是在修改当前数组。