Python 运行时切片

Python 运行时切片,python,numpy,Python,Numpy,有人能告诉我如何在运行时分割numpy.array吗? 我不知道“编码时间”的排名(维度数) 一个简单的例子: import numpy as np a = np.arange(16).reshape(4,4) # 2D matrix targetsize = [2,3] # desired shape b_correct = dynSlicing(a, targetsize) b_wrong = np.resize(a, targetsize) print a [[ 0 1 2 3]

有人能告诉我如何在运行时分割numpy.array吗? 我不知道“编码时间”的排名(维度数)

一个简单的例子:

import numpy as np
a = np.arange(16).reshape(4,4) # 2D matrix
targetsize = [2,3] # desired shape

b_correct = dynSlicing(a, targetsize)
b_wrong = np.resize(a, targetsize)

print a
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
print b_correct
[[0 1 2]
 [4 5 6]]
print b_wrong
[[0 1 2]
 [3 4 5]]
还有我丑陋的表情()

Resize()将不会执行此操作,因为它会在删除元素之前将数组展平

谢谢,
Tebas

您可以直接“更改”它。这是由于阵列的性质只允许背景

相反,您可以复制剖面,或者更好地创建所需形状的视图:

传递切片对象的元组执行以下操作:

def dynSlicing(data, targetsize):
    return data[tuple(slice(x) for x in targetsize)]
简单解决方案:

b = a[tuple(map(slice,targetsize))]

但这有什么帮助呢?问题是如果在我编写代码时不知道排名,如何进行切片。只是想为dynSlicing()寻找一个别致的替代品。是的,这很好。复杂度为O(无偏差),且无数据复制:-)谢谢!不客气,这只是理解
\uuu getitem\uuuu
方法作为参数得到了什么:-)@Tebas,谢谢你,但是你应该接受这个好的有用的答案(使用答案左边数字下的复选标记形状的图标)-这是至关重要的堆栈溢出礼仪!稍微短一点,但是使用生成器表达式而不是映射要好一点,因为不需要中间列表:-)
b = a[tuple(map(slice,targetsize))]