python - 为什么 hstack() 复制数据而 hsplit() 在其上创建 View ?

标签 python numpy

在 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/

相关文章:

python - 创建具有向量倍数的 numpy 矩阵的最快方法

python - 使用 numpy 翻译网格化的 csv 文件

python - 计算*滚动* Pandas 系列的最大回撤

c++ - 如何在 WIndows 上使用 Cython 编译 Pyparsing?

python - 删除重复项,将最高值的行保留在另一列中

python - 当 Python 子进程获取数据时,Raspberry Pi 上 LCD 上每行末尾的字符错误

numpy - Tensorflow - Tensorboard Event Accumulator 从 TensorEvent 获取 Tensor

python - 如何从 django 中的低级缓存 API 中删除特定键

python - 在 ubuntu 14.04 上使用 python 版本安装 MORSE 模拟器的问题

python - 基于一列元素对两个数组进行排序和连接