copy和view
copy和view
1 | import numpy as np |
切片:
1 | z = x[0:5] |
[1 2 3 4 5]
花哨索引:
1 | y = x[[0, 1, 2, 3, 4]] |
[1 2 3 4 5]
布尔索引
1 | w = x[[True, True, True, False, False]] |
[1 2 3]
切片返回的是原数组的一个view,花哨索引和布尔索引返回的是原数组的一个copy:
1 | x[0] = 100 |
直接改变原数组:
x = [100 2 3 4 5]
改变切片后会影响原数组:x = [200 2 3 4 5]
改变花哨索引后不影响原数组:x = [200 2 3 4 5]
改变布尔索引后不影响原数组:x = [200 2 3 4 5]
然而虽然改变切片是原数组的一个view,但是id却不同...
1 | z1 = x[0:5] |
43565216
np.where()!
1 | x = np.array([1,2,3,4,5]) |
(array([2, 3, 4], dtype=int64),)
要改变原数组的值...A不可以,B可以...
A
1 | for i in x[index[0]]: |
[1 2 3 4 5]
B
1 | for i in index[0]: |
[ 1 2 100 100 100]