如果我想要的话:
如果x
是一维的,则返回x[I]
如果x
是二维的,则返回x[i,:]
如果x
是三维的,则返回x[i, j, :]
...
x
是numpy数组
class Foo:
def __init__(self, x):
self.x = x # an n-d array
def pop_q(q, tuple):
q = zeros(tuple)
def set_q(q, i, j=None, qq):
if q.ndim == 1:
q[i] = qq
else if q.ndim == 2:
q[i, :] = qq
else if q.ndim == 3:
q[i, j, :] = qq
def get_q(q, i, j=None):
if q.ndim == 1:
return q[i]
else if q.ndim == 2:
return q[i, :]
else if q.ndim == 3:
return q[i, j, :]
但是有更好的书写方式吗? (也许使用*args
到任意维数组)
我这样做的原因是为了确保模块化
答案 0 :(得分:0)
我认为这应该可行:
def get_q(self, i, j=None):
slicing = (i, j, slice(None))[:self.x.ndim]
return self.x[slicing]
记住切片(无)对应于:
所以我创建了一个与(i,j,:)相对应的元组,但是我只保留了该元组的第一个self.x.ndim元素
如果您想要一种适用于任何尺寸的解决方案:
def get_q(self, *indices):
slicing = (indices + (slice(None),) * self.x.ndim)[:self.x.ndim]
return self.x[slicing]
设置者应该以完全相同的方式工作。