ftx*_*txx 5 python arrays numpy
我是 Python 的初学者。我曾经密集地使用matlab。现在我正在转向python。我有一个关于数组维数的问题。
我导入 Numpy
我首先创建一个数组 X,然后我使用一些嵌入的函数,比如 sum,来处理我的数组。最终,当我尝试检查数组 X 的维数时,它变成了:X.shape,outputs (81,)。数字 81 是我所期望的,但我也期望第 2 维是 1,而不仅仅是省略。这让我感到很不舒服,即使我直接输入X,它也输出正确,即一列和X中的数字都符合预期。
然后,当我使用另一个数组 Y 时,它实际上具有 Y.shape,输出 (81,1),然后如果我键入 X*Y,我希望看到一个维度数组 (81,1) 但相反,我看到了一个维数数组 (81,81)。
我不知道产生这个结果的潜在机制是什么。
我解决这个问题的方法很愚蠢。我首先创建一个新数组 C = zeros((81,1)),所以 C 字面上有维度 (81,1),然后我通过键入 C[:,0]=X 将我的 X 分配给 C,然后是 C.shape = (81,1)。请注意,如果我输入 C=X,则 C.shape=(81,),这又回到了我的问题。所以我可以解决我的问题,但我确信有更好的方法来解决我的问题,我也不明白为什么 python 会产生像 (81,) 这样的东西,省略了第二维。
Numpy 不会省略数组的维数。它是一个为多维数组(不仅仅是一维或二维数组)构建的库,因此它在不同维度的数组之间做出了非常清晰的区分(它不能假设任何数组只是高维数组的简并形式,因为数字从概念上讲,维度是无限的)。
有维度的数组(81, 1)是二维数组,第二维的值等于 1。
有维度的数组(81, )只是一维数组。
当您编写 时C[:,0],您指的是一个列。所以
如果您编写C[: 0] = X,则将一列分配给 的其中一列C(这恰好是唯一的一列),因此不会更改的维度C。
如果您写C = X,则表示C现在也是一列,因此正在更改的维度C。