2014-10-10 38 views
3

有没有办法从一维数组中分割零维数组?如何在numpy中从一维数组中提取零维片

例如,如果我有一个N维ndarrayarrarr[0]返回一个(N-1)维ndarray

但是,如果我有一个一维ndarrayxx[0]不返回一个0维ndarray,而是numpy.int64,(如果x包含int64 S)。

最少例如:

def increment(zero_d_array): 
    zero_d_array[...] = zero_d_array + 1 

counter = numpy.array(0) # a zero-dimensional array containing scalar 0 
increment(counter)  # success; counter is now 1 

counters = numpy.zeros(3, dtype=int) # [0, 0, 0] 
increment(counter[1]) # fails; counter[1] is a numpy.int64, not a 0-D array 

我实现上述将与increment(counter[1:2])工作,但这只是因为increment()发生与两个0-d和1-d的输入工作。并非所有功能都会如此灵活。

+0

我不知道有一种方法。 Zero-D数组在Numpy中有点古怪。你是否有理由需要这样做? – BrenBarn 2014-10-10 17:42:11

+0

我经常发现zero-d数组是一种有用的方法,它具有“装箱”的基元,就像一个int,我可以传递给一个函数,让它在原地进行修改(无法用纯整数进行修改)。正如我在问题中提到的那样,显然有一些解决方法,比如使用大小为1的1-D切片,但这些更加冗长。 – SuperElectric 2014-10-10 17:48:06

+0

是的,但问题是你需要能够通过切片得到它们吗?如果你只想保持一个零d的柜台,你可以按照你明确的创建它的方式来做。所以我的意思是,你实际上在做什么,这使得你想要一般地分割和增加任何维度的数组,而不是仅仅让你的计数器增加它? – BrenBarn 2014-10-10 17:51:44

回答

6

使用省略号:

increment(counter[1, ...])