如何在numpy中表示“:”

时间:2015-05-18 10:08:46

标签: python numpy

我想切片多维ndarray,但不知道我将切入哪个维度。让我们说我们有一个有形状的ndarray A(6,7,8)。有时我需要在第一维A [:,3,4]上切片,有时在第三维A [1,2,:]上切片。

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

SELECT e.*, sfoi.*, sfoa.lastname, sfoa.email, sfoa.street, sfoa.postcode,  sfoa.country_id
FROM sales_flat_order e
INNER JOIN sales_flat_order_item sfoi ON (e.entity_id=sfoi.order_id) 
INNER JOIN sales_flat_order_address sfoa ON (e.entity_id=sfoa.parent_id)
WHERE date_format(e.created_at, '%Y') LIKE '2015' 
AND sfoi.parent_item_id IS NULL 
AND sfoi.qty_ordered > 0;

2 个答案:

答案 0 :(得分:4)

:切片可以通过调用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]

答案 1 :(得分:1)

您希望index成为元组,包含数字,列表和slice对象的混合。许多带有numpy参数的axis函数构造了这样的元组。

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)

在这种情况下,index可以是列表或元组。它不能是一个数组。

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

http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html

  

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