我无法理解函数slice()与通常的Numpy索引符号的关系。
test = np.random.rand(4,4,4)
test[:,0:1,2]
>>> array([[0.73897606],
[0.68005618],
[0.32831257],
[0.36882484]])
字符串
但我不知道接下来会发生什么
test[slice(None),slice(0,1),slice(2,3)]
>>>> array([[[0.73897606]],
[[0.68005618]],
[[0.32831257]],
[[0.36882484]]])
型
一些实验似乎证实slice(None)
等价于:
,slice(0,1)
等价于0:1
,但slice(2,3)
等价于2
,作为索引。
如何使用slice()
函数描述[:,0:1,2]
切片?
有人能给予我们点提示吗?我也不明白第二个输出的形状从何而来,非常感谢
编辑-附加背景
我希望能够做的是动态切片一个数组,给定一个输入。例如,给定一个形状为(10,10,10,10)的数组S
,用户可以选择两个变量进行绘图,而将其他两个变量固定在选定的位置。例如,(surface)绘制第一个和第三个,将第二个和第四个保持在指数(2,3)处。我可以传递数组S[:,2,:,3]
。
根据Dynamically slice an array中的答案,我认为我应该有类似于
axis_to_plot_1 = 0
axis_to_plot_2 = 2
axis_to_slice_1 = 1
index_to_consider_1 = 2
axis_to_slice_2 = 3
index_to_consider_2 = 3
slc = [slice(None)] * len(S.shape)
slc[axis_to_slice_1] = slice(index_to_consider_1, index_to_consider_1 +1)
slc[axis_to_slice_2] = slice(index_to_consider_2, index_to_consider_2+1)
型
这将解决我的问题,我可以为:
(绘图时要考虑的变量)和“i”索引情况(关于剩余维度的部分)都slice()
。
如何在两个轴上最好地实现上述动态切片,请提供任何想法?
1条答案
按热度按时间sirbozc51#
这是不等价的。
2
不是切片,而是索引。切片将保留维数,而索引将删除一个。等效性为:
字符串
输出量:
型