使用ndarray.view
,可以执行以下操作:
import numpy as np
a = np.arange(6)
b = a.view()
b[...] = [5, 5, 5, 5, 5, 5]
a
和b
现在都是[5, 5, 5, 5, 5, 5]
。
现在,我可以使用切片/索引进行相同的操作吗?那么视图不会显示完整的数组,而只是一个切片?类似的东西:
import numpy as np
a = np.arange(6)
idx = [0, 2, 4]
b = a[idx] # please just return a view into `a` here
b[...] = [5, 5, 5]
现在a
当然仍是[0, 1, 2, 3, 4, 5]
,但我希望将其[5, 1, 5, 3, 5, 5]
。
在不同数组之间进行映射时,这将非常有用。
答案 0 :(得分:1)
正如评论中所提到的,我们可以在处理用于索引的图案化步幅时获得视图。
让我们来看看几个案例。
1)案例#1:以index = 0
开头2
开始:
In [129]: a = np.arange(6) # Input array
In [130]: idx = [0,2,4] # Simulating these indices for indexing
In [131]: b = a[::2] # Get view
In [132]: b[...] = [5, 5, 5] # Assign values
In [133]: a
Out[133]: array([5, 1, 5, 3, 5, 5]) # Verify
2)案例#2:开始index = 1
并大步迈进2
:
In [134]: a = np.arange(6) # Input array
In [135]: idx = [1,3,5] # Simulating these indices for indexing
In [136]: b = a[1::2] # Get view
In [137]: b[...] = [5, 5, 5] # Assign values
In [138]: a
Out[138]: array([0, 5, 2, 5, 4, 5]) # Verify
此方法可扩展为多维数组。