我很惊讶会numpy.split
产生 alist
而不是array
. 我会认为返回一个 会更好array
,因为numpy
已经投入了大量工作来使数组比列表更有用。任何人都可以证明numpy
返回 alist
而不是 a 是合理的array
吗?为什么这对 numpy 开发人员来说是一个更好的编程决策?
问问题
1787 次
2 回答
4
有评论指出,如果狭缝不均匀,则结果不可能是数组,至少不是具有相同dtype
. 充其量它会是一个object
dtype。
但是让我们考虑等长子数组的情况:
In [124]: x = np.arange(10)
In [125]: np.split(x,2)
Out[125]: [array([0, 1, 2, 3, 4]), array([5, 6, 7, 8, 9])]
In [126]: np.array(_) # make an array from that
Out[126]:
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
但是我们可以在不拆分的情况下获得相同的数组 - 只需重塑:
In [127]: x.reshape(2,-1)
Out[127]:
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
现在查看split
. 它只是将任务传递给array_split
. 忽略有关替代轴的细节,它只是
sub_arys = []
for i in range(Nsections):
# st and end from `div_points
sub_arys.append(sary[st:end])
return sub_arys
换句话说,它只是遍历数组并返回连续的切片。那些(通常)是对原作的看法。
所以split
不是一个复杂的功能。您可以自己生成这样的子数组列表,而无需大量 numpy 专业知识。
还有一点。split
可以使用适当的stack
. concatenate
(和家庭)需要一个数组列表。如果给定一个数组数组或更高的暗淡数组,它会有效地迭代第一个维度,例如concatenate(arr) => concatenate(list(arr))
.
于 2018-08-03T18:32:51.603 回答
-1
实际上你是对的它返回一个列表
import numpy as np
a=np.random.randint(1,30,(2,2))
b=np.hsplit(a,2)
type(b)
它将type(b)
作为列表返回,所以文档中没有任何问题,我也首先认为文档是错误的,它没有返回数组,但是当我检查时
type(b[0])
type(b[1])
它返回类型为 ndarray。
这意味着它返回 ndarrary 的列表。
于 2019-06-30T16:44:31.630 回答