我在查看一些numpy代码时遇到了这个问题。numpy在一维阵列和二维阵列中表现出不同的行为。在第一种情况下,它正在创建一个引用,而在第二种情况下,它正在创建一个深度副本
下面是代码片段
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
有人能解释这种行为的原因吗
原因是,你不是以同样的方式切片,它不是关于一维与二维
这里您使用的是切片操作符,因此numpy可以在原始数据上创建一个视图并返回它
这里使用的是所需元素的列表,它不是一个切片(即使可以用切片表示),在这种情况下,numpy返回一个副本
所有这些都是getter,因此它们可以返回view或copy
对于setter,它总是修改当前数组
相关问题 更多 >
编程相关推荐