2014-09-12 38 views
0

假设我有一个多维的形状数组(80,80,17,5,27),其中27(切片轴)可以在第三,第四或第五维中。多维数组中单个维度(可以变化)的数据选择

我想选择切片轴内的数据子集;作为示例:

slice_axis = N.shape(data).index(27)#slice_axis = 4对于上面列出的数据 data_new = data [:,:,:,0:tot_slices/2]#where此选择位置取决于切片轴

或者,如果数据形状如下所示:(80,80,27,17,5): 然后slice_axis = 2和data_new = data [:,:,0: tot_slices/2,:,:]

有没有一个快速的方法来做到这一点,最好不需要转置数据?

+1

等待..什么?你是什​​么意思,“#这个选择位置取决于切片索引。”什么选择地点?你想达到的data_new的例子是什么? – 2014-09-12 21:30:45

+0

我在我的例子中选择了数据数组第五维中的一部分数据;第五维对应于切片索引的兴趣(从上面的行)。 – Dan 2014-09-12 22:45:22

+0

目前还不清楚。你可能想点击编辑,然后编辑你的问题。如果你举了一些例子,这真的会有帮助。你能否包含你的代码和想要做的例子(填写你不知道的评论或psedo代码)? – 2014-09-12 22:55:52

回答

0

如果我正确理解你的问题,下面应该工作:

slice_idx = N.shape(data).index(27) 
slices = [ slice(0, None, None),]*4 
slices.insert(slice_idx, slice(0, tot_slices/2, None)) 
data_new = data.__getitem__(slices) 
+0

是的,这是我想要的(尽管我还没完全理解它)。我还会发布我在下面提出的解决方案。 – Dan 2014-09-16 23:40:45

+0

本质上,正常的方括号表示法映射到'__getitem__',每个部分成为'slice'对象。这是手动完成这个过程。 – mdurant 2014-09-16 23:46:20

0

,我想出了前mdurant回答了如下解决方案:

selected_axis = N.shape(数据)的.index(27)

删除1的动态创建偶数的数据的分裂(因为27是奇数)

数据= N.delete(数据,N.ceil(27/2),轴= selected_axis)

(data_base,data_activation)= N.split(数据,如图2所示,轴= selected_axis)