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

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日

悬赏问题

  • ¥100 照片生成3D人脸视频
  • ¥15 伪装视频时长问题修改MP4的时长问题,
  • ¥15 JETSON NANO
  • ¥15 VS开发qt时如何在paintgl函数中用pushbutton控制切换纹理
  • ¥20 关于 openpyxl 处理excel文件地问题
  • ¥15 MS中不知道高分子的构型怎么构建模型
  • ¥60 QQOP数据,什么是op数据号,怎么提取op数据!能不能大量提取(语言-c语言)
  • ¥15 matlab代码 关于微分方程和嵌套的分段函数。
  • ¥15 onlyoffice编辑完后立即下载,下载的不是最新编辑的文档
  • ¥15 求caverdock使用教程