更改 numpy 数组索引(不是值)
Change numpy array indexes (not values)
我有一个 numpy 数组,我想看看是否可以使用自定义数字序列修改索引值(而不是数组值)。
假设数组长度为 10,可以更改索引,而不是使用索引 0-9
访问它的元素,它可以访问...让我们说.. 50-59
?
基本上就像更改 rownames/colnames
但在 np 数组中而不是 pandas df.
不确定是否需要它,我相信还有其他方法,但一种方法是为它创建一个 class。处理您的 50-59 示例:
class UnnaturalList(list):
def __getitem__(self, index):
if type(index) == int and index > 0:
index -= 50
if type(index) == slice:
start, stop = index.start, index.stop
if start and start > 0:
start -= 50
if stop and stop > 0:
stop -= 50
index = slice(start, stop, index.step)
return super().__getitem__(index)
def __setitem__(self, index, val):
super().__setitem__(index - 50, val)
然后你可以用这个class创建一个列表并使用索引和切片
a_list = UnnaturalList(range(1,6))
a_list --> [1,2,3,4,5]
a_list[50] --> 1
a_list[51] --> 2
a_list[50:53] --> [1,2,3]
我认为有一种方法可以为数组做类似的事情,或者更干净的事情,但这是适合你的一种方法。
我有一个 numpy 数组,我想看看是否可以使用自定义数字序列修改索引值(而不是数组值)。
假设数组长度为 10,可以更改索引,而不是使用索引 0-9
访问它的元素,它可以访问...让我们说.. 50-59
?
基本上就像更改 rownames/colnames
但在 np 数组中而不是 pandas df.
不确定是否需要它,我相信还有其他方法,但一种方法是为它创建一个 class。处理您的 50-59 示例:
class UnnaturalList(list):
def __getitem__(self, index):
if type(index) == int and index > 0:
index -= 50
if type(index) == slice:
start, stop = index.start, index.stop
if start and start > 0:
start -= 50
if stop and stop > 0:
stop -= 50
index = slice(start, stop, index.step)
return super().__getitem__(index)
def __setitem__(self, index, val):
super().__setitem__(index - 50, val)
然后你可以用这个class创建一个列表并使用索引和切片
a_list = UnnaturalList(range(1,6))
a_list --> [1,2,3,4,5]
a_list[50] --> 1
a_list[51] --> 2
a_list[50:53] --> [1,2,3]
我认为有一种方法可以为数组做类似的事情,或者更干净的事情,但这是适合你的一种方法。