我想切片多维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;
答案 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]。这对于构造适用于任意维数组的通用代码非常有用。