我带了几行数组:
import numpy as np
a = np.arange(1, 7)
a = a.reshape(2, -1)
print (a)
[[1 2 3]
[4 5 6]]
我需要访问当前行的最后一个元素之后的下一行的第一个元素:
print (a[0][2:4])
[3]
我希望在这里:
[3 4]
我还需要访问最后一行的最后一个元素后第一行的第一个元素:
print (a[1][2:4])
[6]
我希望在这里:
[6 1]
您能否向我推荐最简单的方法来实现这一目标?
答案 0 :(得分:0)
您正在尝试访问不存在的索引。您的a[0]
包含索引[0, 1, 2]
,因此尝试访问索引3的范围超出范围。您的选项仅限于将阵列保持在其原始的扁平形状中以获得正确的切片。即使在这种情况下,您还需要一个额外的函数来循环经过最后一个索引。无论哪种情况,你都必须压扁你的阵列:
def getslice(arr, row, start, end):
if end + arr.shape[1] * row > arr.flatten().size:
return np.concatenate((arr.flatten()[start + arr.shape[1] * row:],
arr.flatten()[:(end + arr.shape[1] * row) % arr.flatten().size]))
else:
return arr.flatten()[start + arr.shape[1] * row:end + arr.shape[1] * row]
输出:
getslice(a, 1, 2, 4) #a[1][2:4]
array([6, 1])
getslice(a, 0, 2, 5) #a[0][2:5]
array([3, 4, 5])