关于ndarray的问题

源码货栈 课程设计 1
import numpy as np
aa=np.array([1,2])
aa.data
Out[278]: <memory at 0x000001BED39961C0>
id(aa[0])
Out[279]: 1919105783888
id(aa[0])
Out[280]: 1919105781968
id(aa.data[0])
Out[281]: 140709382463232
id(aa.data[0])
Out[282]: 140709382463232
aa.__array_interface__['data'][0]
Out[283]: 1919049863168

我有3个问题:

  1. aa.data的值 0x000001BED39961C0是数据所在内存地址吗?
  2. 为什么两次输出id(aa[0])的结果不一样,而同样两次输出id(aa.data[0])结果却是相同的?
  3. id(aa.data[0])和aa. array_interface ['data'][0]的值为什么不一样?

回复

共2条回复 我来回复
  • 毕设向导
    这个人很懒,什么都没有留下~
    评论

    1、aa.data的值 0x000001BED39961C0是数据所在内存地址 2、为什么数组元素的ID不断变化?在IPython中,每个用户输入都存储在历史记录中,在 print 之间创建对象,使得 aa[0] 对象不太可能放置在相同的内存地址。 也就是说,在IPython中一次执行两次打印时,两个对象的ID相同;但每次执行此操作时,ID不同,因为每次通过索引访问 ndarray 内部时,都会动态创建一个新的内存(缓冲区),所以两次输出id(aa[0])的结果不一样

    0条评论
  • 源码工厂
    这个人很懒,什么都没有留下~
    评论

    我猜想 , 应该是每次调用aa.data或者 aa[0]的时候, np 都重新生成数据。 变量 aa入口是不变的。

    0条评论

发表回复

登录后才能评论