如何在numpy中从一维数组中提取零维片
问题描述:
有没有办法从一维数组中分割零维数组?如何在numpy中从一维数组中提取零维片
例如,如果我有一个N维ndarray
arr
,arr[0]
返回一个(N-1)维ndarray
。
但是,如果我有一个一维ndarray
x
,x[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的输入工作。并非所有功能都会如此灵活。
答
使用省略号:
increment(counter[1, ...])
我不知道有一种方法。 Zero-D数组在Numpy中有点古怪。你是否有理由需要这样做? – BrenBarn 2014-10-10 17:42:11
我经常发现zero-d数组是一种有用的方法,它具有“装箱”的基元,就像一个int,我可以传递给一个函数,让它在原地进行修改(无法用纯整数进行修改)。正如我在问题中提到的那样,显然有一些解决方法,比如使用大小为1的1-D切片,但这些更加冗长。 – SuperElectric 2014-10-10 17:48:06
是的,但问题是你需要能够通过切片得到它们吗?如果你只想保持一个零d的柜台,你可以按照你明确的创建它的方式来做。所以我的意思是,你实际上在做什么,这使得你想要一般地分割和增加任何维度的数组,而不是仅仅让你的计数器增加它? – BrenBarn 2014-10-10 17:51:44