Python “如何表示”:&引用;在努比

Python “如何表示”:&引用;在努比,python,numpy,Python,Numpy,我想切片一个多维数据数组,但不知道将在哪个维度上切片。假设我们有一个形状为(6,7,8)的ndarray a。有时我需要在一维A[:,3,4]上切片,有时需要在三维A[1,2,:]上切片 是否有代表“:”的符号?我想用它来生成一个索引数组 index=np.zeros(3) index[0]=np.: index[1]=3 index[2]=4 A[index] :切片可以通过调用slice(None)显式创建,下面是一个简短的示例: import numpy as np A = np.ara

我想切片一个多维数据数组,但不知道将在哪个维度上切片。假设我们有一个形状为(6,7,8)的ndarray a。有时我需要在一维A[:,3,4]上切片,有时需要在三维A[1,2,:]上切片

是否有代表“:”的符号?我想用它来生成一个索引数组

index=np.zeros(3)
index[0]=np.:
index[1]=3
index[2]=4
A[index]

切片可以通过调用
slice(None)
显式创建,下面是一个简短的示例:

import numpy as np
A = np.arange(9).reshape(3, -1)

# extract the 2nd column
A[:, 1]

# equivalently we can do
cslice = slice(None) # represents the colon
A[cslice, 1]

您希望
index
成为一个元组,包含数字、列表和
slice
对象。许多采用
axis
参数的
numpy
函数构造了这样一个元组

A[(slice(None, None, None), 3, 4)]  # == A[:, 3, 4]
构造该元组有多种方法:

index = (slice(None),)+(3,4)

index = [slice(None)]*3; index[1] = 3; index[2] = 4

index = np.array([slice(None)]*3]; index[1:]=[3,4]; index=tuple(index)
在这种情况下,
索引可以是列表或元组。它不可能是数组

从列表(或数组)开始很方便,因为您可以修改值,但最好在使用前将其转换为元组。我必须检查文档中的详细信息,但在某些情况下,列表的含义与元组不同

请记住,切片元组始终可以构造为obj,并在x[obj]表示法中使用。可以在构造中使用切片对象来代替[start:stop:step]符号。例如,x[1:10:5,::-1]也可以实现为obj=(slice(1,10,5),slice(None,None,-1));x[obj]。这对于构造在任意维数组上工作的通用代码非常有用


是的,但它的工作原理有点不同:使用内置方法
slice
创建1D切片,并使用这些切片的元组进行索引
slice(None,None)
表示
这正是您想要的。您不需要将slice对象作为第二个索引项传递,您只需再次传递
1
a[slice(None,None),1]
(这正是
a[:,1]
的意思)。@poke,不错。而且
切片(无)
似乎足够了。似乎我试图重新发明轮子——我想常丽链接了一个复制品。