有人可以解释一下如何在运行时切片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]]
我的丑陋 dynSlicing():
def dynSlicing(data, targetsize):
ndims = len(targetsize)
if(ndims==1):
return data[:targetsize[0]],
elif(ndims==2):
return data[:targetsize[0], :targetsize[1]]
elif(ndims==3):
return data[:targetsize[0], :targetsize[1], :targetsize[2]]
elif(ndims==4):
return data[:targetsize[0], :targetsize[1], :targetsize[2], :targetsize[3]]
Resize()不会完成这项工作,因为它会在删除元素之前展开数组。
谢谢, Tebas
答案 0 :(得分:6)
传递一个切片对象元组可以完成这项工作:
def dynSlicing(data, targetsize):
return data[tuple(slice(x) for x in targetsize)]
答案 1 :(得分:2)
简单的解决方案:
b = a[tuple(map(slice,targetsize))]
答案 2 :(得分:1)
你可以直接'改变'它。这是由于阵列的性质只允许背景。
相反,您可以复制一个部分,甚至可以更好地创建所需形状的视图: http://www.scipy.org/Tentative_NumPy_Tutorial#head-1529ae93dd5d431ffe3a1001a4ab1a394e70a5f2