bopodoq 2022-09-08 11:34 采纳率: 50%
浏览 19

numpy的切片底层是怎么实现的,为什么切片之后赋值会影响到原来的数据?

下面的程序

import numpy as np

x = np.zeros((3, 3))

y = x[:, 0]
y[1] = 2 # 这里会改变x[1,0]的值
print(x)

z = x[0, :]
z[2] = 3 # 这里会改变x[0, 2]的值
print(x)

数据在底层是怎么存放的,是怎么实现的?

用C语言做对比,相当于C语言的二维数组x[3][3]

z=x[0,:],切片返回的是指针,指向z[0]的地址, z[2] = 3 是能改变x[0][2]的值的,

但是y[1]=2是怎么做到的呢?y[0] 到y[2]的地址是不连续的

还有另外一个链表之类的东西吗?

  • 写回答

2条回答 默认 最新

  • 万里鹏程转瞬至 人工智能领域优质创作者 2022-09-08 15:47
    关注

    切片之后返回的是指针,所以他能影响到原理的数据。
    切片后返回的指针数据在换行时确实是不连续的,切片指针在计算指向数据的地址时确实是比较麻烦的,需要考虑原始数组的维度,然后进行跳读(跨过被切片略过的数据)。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月8日