numpy阵列的奇怪行为

2024-10-05 17:42:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我不理解numpy.array_split的行为。实际上,当我考虑一个给定长度的数组时,我确定了一个子索引,并尝试使用array_split。如果子指数的数目是奇数或偶数,我会得到不同的行为。让我们举个例子

import numpy as np
a = np.ones(2750001) # fake array
t = np.arange(a.size) # fake time basis
indA = ((t>= 5e5) & (t<= 1e6)) # First subindices odd number
indB = ((t>=5e5+1) & (t<= 1e6)) # Second indices even number
# now perform array_split
print(np.shape(np.array_split(a[indA],10)))
# (10,)
print(np.shape(np.array_split(a[indB],10)))
# (10, 50000)

现在我们得到了不同的结果,基本上对于偶数,shape命令实际给出(1050000),而对于奇数索引,shape命令给出(10,)(假设10个列表)。实际上我有点惊讶,我想了解原因。我知道array_split也可以在拆分数不相等的情况下使用。但我也想要一些线索,因为我需要插入一个循环,在这个循环中我不知道指数是偶数还是奇数。在


Tags: 命令numpynumbernp数组指数arrayfake
1条回答
网友
1楼 · 发布于 2024-10-05 17:42:59

我认为令人惊讶的行为与np.shape有关,而不是np.array_split

In [58]: np.shape([(1,2),(3,4)])
Out[58]: (2, 2)

In [59]: np.shape([(1,2),(3,4,5)])
Out[59]: (2,)

^{}显示数组的形状np.asarray(a)

^{pr2}$

因此,当np.array_split返回一个长度不等的数组列表时,np.asarray(a)是对象数据类型的一维数组:

In [61]: np.asarray([(1,2),(3,4,5)])
Out[61]: array([(1, 2), (3, 4, 5)], dtype=object)

array_split返回一个长度为等长度的数组列表时,np.asarray(a)返回一个二维数组:

In [62]: np.asarray([(1,2),(3,4)])
Out[62]: 
array([[1, 2],
       [3, 4]])

相关问题 更多 >