python - 不同维度数组的 Numpy getter/setter

标签 python arrays numpy

如果我想:

如果 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 到任意维数组)

我之所以这样封装是为了保证模块化

最佳答案

我认为这应该可行:

def get_q(self, i, j=None):
    slicing = (i, j, slice(None))[:self.x.ndim]
    return self.x[slicing]

记住slice(None)对应:

所以我创建了一个对应于 (i, j, :) 的元组,但是我只保留了这个元组的第一个 self.x.ndim 元素

如果您想要一个适用于任意数量维度的解决方案:

def get_q(self, *indices):
    slicing = (indices + (slice(None),) * self.x.ndim)[:self.x.ndim]
    return self.x[slicing]

Setter 应该以完全相同的方式工作。

关于python - 不同维度数组的 Numpy getter/setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51474100/

相关文章:

python - 无法在 Scrapy 蜘蛛中使用多个代理

python - PySAL OLS 模型 : AttributeError: 'OLS' object has no attribute 'predict'

python - 使用numpy从二进制文件读取char数据

python - Python 中 Matlab 的 'fread' 是什么?

python - Numpy 数组仅显示唯一行

python - GAE 1.5.5 本地 SDK 无法与 python2.7 runtime 一起运行

python - 如何使路径目录对任何用户通用且动态?

arrays - 如何保存整个整数数组?

javascript - Plotly Js Choropleth Iso2 而不是 Iso3

javascript - 计算 JavaScript 对象中属性的变化百分比