python - 构建一个包含冒号的元组以用于索引 numpy 数组

标签 python arrays numpy

我创建了一个类来处理特定类型的多维数据。该类具有三个属性:包含轴名称的列表 (self.axisNames);包含沿每个轴的参数值的字典(self.axes;keyd 使用 axisNames 中的条目);和一个包含数据的 numpy 数组,每个轴都有一个维度 (self.intensityArr)。

该类还具有根据我对特定情况的需要动态添加新轴的函数,这使得索引 intensityArr 成为一个棘手的问题。为了更好地建立索引,我开始编写一个函数来构建我需要的索引:

内部类:

def indexIntensityArr(self,indexSpec):
    # indexSpec is a dictionary containing axisName:indexVal entries (indexVal is an int)
    # I want the function to return a tuple for use in indexing (see below def)
    indexList = []
    for axis in self.axisNames:
        if axis in indexSpec:
            indexList.append(indexSpec[axis])
        else:
            # <do something to add : to index list (tuple)>
    return tuple(indexList)

课外:

# ... create an instance of my class called myBlob with 4 dimensions ...

mySpec = {'axis1':10,'axis3':7}
mySlicedArr = myBlob.intensityArr[myBlob.indexIntensityArr(mySpec)]

我希望上面的结果是 mySlicedArr 是一个二维数组。

我需要在“else”子句中添加什么才能在用于索引 intensityArr 的元组中获得 :(或等效项)?这可能是解决问题的糟糕方法吗?

最佳答案

在索引 [] 中,一个 : 被翻译成一个 slice,并且整个事情被传递给 __getitem__作为一个元组

indexList = []
for axis in self.axisNames:
    if axis in indexSpec:
        indexList.append(indexSpec[axis])
    else:
        indexList.append(slice(None))

有几个 numpy 函数使用这样的索引技巧 - 即构建索引值和切片的元组。或者,如果他们需要改变它,他们将从一个列表开始,该列表可以变异,并在使用前将其转换为元组。 (例如 np.apply_along_axis)

是的,slice 的完整规范是 slice(start, stop, step),start 和 stop 是可选的。与 np.arangerange 相同。而 None 等同于 : 表达式中未指定的值。

np.lib.index_tricks.py 中的一个小自定义类将 : 符号转换为切片:

In [61]: np.s_[:,:1,0:,::3]
Out[61]: 
(slice(None, None, None),
 slice(None, 1, None),
 slice(0, None, None),
 slice(None, None, 3))

关于python - 构建一个包含冒号的元组以用于索引 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39474396/

相关文章:

python - 检查元素并使用 XPATH 获取正确的数据 python

python - Pandas DataFrame 将列表存储为字符串 : How to convert back to list

python - 在 Django 中创建一个包含动态数据的 3 列 HTML 表格

javascript - 更改数组对象的值

python - 轴的 Np.sum 不同

python - 是否可以使用 pandas.DataFrame.rolling 且步长大于 1?

python - 遗传算法-无序可变长度染色体-交叉策略?

arrays - Julia 中以 DataArrays 和 Arrays 作为参数的函数

从函数更改 char 数组

python - numpy fftn 对于多个图像的 2d fft 效率非常低