我很困惑为什么以下两个print(an_array)
语句给出了两个不同的结果。
虽然b_slice
期间明确定义为np.array
使用a_slice
命令,b_slice
和type
属于同一类型。a-slice
会更改an_array
的值,b_slice
将an_array = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
a_slice = an_array[:2, 1:3]
print(type(a_slice)) # <class 'numpy.ndarray'>
print(type(b_slice)) # <class 'numpy.ndarray'>
b_slice = np.array(an_array[:2, 1:3]
b_slice[0,0] = 2000
print(an_array) # returns no change to an_array
[[1 2 3 4]
[5 6 7 8]
[9 10 11 12]]
a_slice[0,0] = 2000
print(an_array) # shows the change from the number 2 to the number 2000
[[1 2000 3 4]
[5 6 7 8]
[9 10 11 12]
不。如果有人能指出我的解释,我会非常感激。
enumerable1.SequenceEqual(enumerable2);
答案 0 :(得分:3)
因为您通过调用np.array
构造函数显式*制作副本:
b_slice = np.array(an_array[:2, 1:3])
鉴于:
a_slice = an_array[:2, 1:3]
切片的结果是numpy
create views而不是浅层副本,与香草列表不同。
注意 *正如@hpaulj指出的那样,np.array
构造函数采用copy
参数,默认为True
。