我想对数组进行切片,以便最后一个值后面跟着第一个值。验证码:
import numpy as np arr = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] m = np.array(arr) print(m[-1:1, -1:1])
预期输出:
[[16 13] [4 1]]
实际输出:
[]
sxpgvts31#
您必须使用高级索引:
In [64]: arr=np.arange(1,17).reshape(4,4) In [65]: arr[[[3],[0]],[3,0]] # or -1 as in mozway's answer Out[65]: array([[16, 13], [ 4, 1]])
进一步考虑后,您可以使用-3步骤:
In [67]: arr[-1::-3, -1::-3] Out[67]: array([[16, 13], [ 4, 1]])
数字和形状是相同的,但strides不同(一个是副本,另一个是视图(有一些有趣的步幅):
strides
In [69]: arr[[[-1],[0]],[-1,0]].strides Out[69]: (8, 4) In [70]: arr[-1::-3, -1::-3].strides Out[70]: (-48, -12)
31moq8wy2#
您正在尝试创建网格。不要使用切片。您可以使用ix_作为便利:
ix_
m[np.ix_([-1, 1], [-1, 1])]
输出:
array([[16, 14], [ 8, 6]])
或者,如果你想要第一个索引,使用0(而不是1):
0
1
m[np.ix_([-1, 0], [-1, 0])]
array([[16, 13], [ 4, 1]])
xwmevbvl3#
您可以使用此问题:
import numpy as np arr = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] m = np.array(arr) print(m[0:len(m):len(m)-1, 0:len(m):len(m)-1][::-1, ::-1])
可能不是最好的,但它的工作。
3条答案
按热度按时间sxpgvts31#
您必须使用高级索引:
进一步考虑后,您可以使用-3步骤:
数字和形状是相同的,但
strides
不同(一个是副本,另一个是视图(有一些有趣的步幅):31moq8wy2#
您正在尝试创建网格。不要使用切片。
您可以使用
ix_
作为便利:输出:
或者,如果你想要第一个索引,使用
0
(而不是1
):输出:
xwmevbvl3#
您可以使用此问题:
可能不是最好的,但它的工作。