在 NumPy 中,为什么 hstack()
从堆叠的数组中复制数据:
A, B = np.array([1,2]), np.array([3,4])
C = np.hstack((A,B))
A[0]=99
为 C
提供:
array([1, 2, 3, 4])
而 hsplit()
在数据上创建了一个 View :
a = np.array(((1,2),(3,4)))
b, c = np.hsplit(a,2)
a[0][0]=99
为 b
提供:
array([[99],
[ 3]])
我的意思是 - 实现此行为背后的原因是什么(我发现它不一致且难以记住):我接受这种情况的发生是因为它是以这种方式编码的......
最佳答案
基本上,底层的 ndarray 数据结构只有一个指向其数据内存开始的指针,然后是关于如何在每个维度中移动的跨步信息。如果连接两个数组,它将不知道如何从一个内存位置移动到另一个内存位置。另一方面,如果将一个数组拆分为两个数组,每个数组都可以轻松存储指向第一个元素(位于原始数组内部某处)的指针。
基本的 C 实现是 here ,并且有一个很好的讨论:
http://scipy-lectures.github.io/advanced/advanced_numpy/index.html#life-of-ndarray
关于python - 为什么 hstack() 复制数据而 hsplit() 在其上创建 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22616504/