一维和二维阵列的不同行为

2024-09-29 06:30:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我在查看一些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

有人能解释这种行为的原因吗


Tags: 代码numpyvaluenp情况slicearrayfirst
1条回答
网友
1楼 · 发布于 2024-09-29 06:30:15

原因是,你不是以同样的方式切片,它不是关于一维与二维

slice_arr = arr[:3]

这里您使用的是切片操作符,因此numpy可以在原始数据上创建一个视图并返回它

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

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

所有这些都是getter,因此它们可以返回view或copy

对于setter,它总是修改当前数组

相关问题 更多 >