我试图理解numpy“2D”数组引起的差异,即numpy.zeros((3, ))、numpy.zeros((3, 1))、numpy.zeros((1, 3))。
我曾经id查看每个元素的内存分配。但我在 iPython 控制台中发现了一些奇怪的输出。
a = np.zeros((1, 3))
In [174]: id(a[0, 0])
Out[174]: 4491074656
In [175]: id(a[0, 1])
Out[175]: 4491074680
In [176]: id(a[0, 2])
Out[176]: 4491074704
In [177]: id(a[0, 0])
Out[177]: 4491074728
In [178]: id(a[0, 1])
Out[178]: 4491074800
In [179]: id(a)
Out[179]: 4492226688
In [180]: id(a[0, 1])
Out[180]: 4491074752
Run Code Online (Sandbox Code Playgroud)
元素的记忆是
此外,形状 (1, 3) 的数组中的元素一开始似乎是连续存储的,但对于其他形状则不然,例如
In [186]: a = np.zeros((3, ))
In [187]: id(a)
Out[187]: 4490927280
In [188]: id(a[0])
Out[188]: 4491075040
In [189]: id(a[1]) …Run Code Online (Sandbox Code Playgroud) 我试图理解人们称之为矩阵的内容与人们在列表中调用列表的内容之间的差异.
它们是相同的,一旦创建,你可以对它们做同样的事情(在它们内部以相同的方式引用元素,等等).
例子:
在列表中制作列表:
ListsInLists = [[1,2],[3,4],[5,6]]
Run Code Online (Sandbox Code Playgroud)
制作一个多维数组:
np.random.rand(3,2)
Run Code Online (Sandbox Code Playgroud)
堆叠数组以制作矩阵:
Array1 = [1,2,3,4]
Array2 = [5,6,7,8]
CompleteArray = vstack((Array1,Array2))
Run Code Online (Sandbox Code Playgroud)