【发布时间】:2017-02-16 12:52:57
【问题描述】:
我无法理解数组在 python 中的工作原理。
我编写了这个简短的演示代码:
from numpy import zeros
a = zeros((3), 'd')
b = zeros((2,3), 'd')
for i in range(2):
for j in range(3):
a[j] = i*j
b[i] = a
print "A: " + str(a) + "\n"
print "B: " + str(b)
这个输出是:
A: [ 0. 1. 2.]
B: [[ 0. 0. 0.] [ 0. 1. 2.]]
所以这是我的问题。为什么不是这个输出:
A: [ 0. 1. 2.]
B: [[ 0. 1. 2.] [ 0. 1. 2.]]
因为我在同一个a中进行了更改,并且数组的地址没有改变。
【问题讨论】:
-
因为您将所有
b子列表的引用更改为a -
for i in range(2)-> 你的第一个循环特征值i=0,设置a[j]= 0 为所有j->b[0] = [0. 0. 0.] -
是的,但它是同一个地址。 b 的所有子列表都指向同一个地址。所以最后这些值应该是我在数组中写入的最后一个值吗?
-
b[0]不是子列表 - 它是数组中的一行。 -
我认为问题是,为什么
b[0,:]不是view的a?为什么要复制? b[1,:] 是视图还是副本?列表会发生什么
标签: python arrays numpy memory