将列表传递给纽比.ix_或者,如果事先不知道维数和选择条件,如何切片多维数组?

2024-04-20 10:31:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Numpy中分割多维数组。 假设我的数组是一个5*5*5的数组,理论上我想到的切片可以用纽比.ix_公司名称:

    s0 = [0,1,2]
    s1 = [1,2,3]
    s2 = [1,2,3]
    b = a[numpy.ix_(s0,s1,s2)]

问题是数组的维数,以及我需要沿不同维度划分数组的方式在程序中发生了变化(例如数组'a'可能是2,3,4,。。。尺寸和s0,s1。。。因此,除非我可以将list/tuple传递给纽比九像这样:

^{pr2}$

不幸的是,这不起作用,因为ix只接受一维对象(?)。最好的解决办法是什么?如何自己干净地实现ix(或者有更简单的方法来实现它?)?在


Tags: 程序numpy名称尺寸方式公司切片数组
1条回答
网友
1楼 · 发布于 2024-04-20 10:31:56

使用^{} argument-unpacking operator

b = a[numpy.ix_(*s)]

相当于

^{pr2}$

例如

import numpy as np

N = 3
M = 3
a = np.arange((M+1)**N).reshape([M+1]*N)
s = [np.ones(M).astype(int) for i in range(N)]
s[0] = [0,1,2]
s[1] = [1,2,3]
s[2] = [1,2,3]        
b = a[np.ix_(*s)]
print(b)

印刷品

[[[ 5  6  7]
  [ 9 10 11]
  [13 14 15]]

 [[21 22 23]
  [25 26 27]
  [29 30 31]]

 [[37 38 39]
  [41 42 43]
  [45 46 47]]]

相关问题 更多 >