为什么Numpy省略数组的维数

  • 本文关键字:数组 Numpy python numpy
  • 更新时间 :
  • 英文 :


我有以下问题,我有一个包含60个数组的数组,其中有21个数组,最后这些数组中有3个整数,当我执行形状时,它显示(60,)怎样才能使重塑为(60,21,3)呢?

我不太确定你在问什么,你没有留下很多细节。然而,这里有一些基本的numpy函数似乎可以回答你的问题。

arr = np.random.rand(2,2,1)
print(arr)
#obviously you can use your dimensions of (60,21,3)
#however I am going to print the array

输出:

array([[[0.76494962],
[0.20654063]],
[[0.22742839],
[0.15418584]]])

如果你想打印精确的形状,在(2,2,1)的例子中,print(arr.shape)给出的输出是(2, 2, 1)。这是一个存储在numpy数组中的元组对象,因此不会改变,除非您使用新的numpy数组重新定义该数组。如果numpy不输出(60,21,3)在你的情况下,有一个非常好的机会你设置你的代码不正确。

如果我想调整我的数组大小,重要的是你坚持你的数组的大小,在我的情况下,如果我使用np.size(arr)函数我得到4。这是因为2*2*1 = 4,所以我必须重塑它的大小,坚持相同的大小。例如,这些是有效的调用:

arr = arr.reshape(4)
arr = arr.reshape(1,1,4)
arr = arr.reshape(1,1,2,2)

以此类推。只要你把数字相乘,结果就是np.size(arr)。在本例中,您的形状为(60,21,3),因此您必须将其重塑为60*21*3 = 3780的大小。

我还在下面留下了一个resize函数的示例。同样,你没有留下太多关于你想要什么的细节,所以我假设它是我在这篇文章中概述的功能或解释之一。

>>> import numpy as np
>>> arr = np.random.rand(60,21,3)
>>> arr.shape
(60, 21, 3)
>>> arr = arr.reshape(3780)
>>> arr.shape
(3780,)
>>> arr = np.random.rand(60)
>>> arr.shape
(60,)
>>> arr = np.resize(arr, (60,21,3))
>>> arr.shape
(60, 21, 3)

您可能创建了一个列表(对象)数组,例如:

b = np.array([0], dtype=np.dtype(object))
b[0] = [4,5,6]
b.shape

给出b为:array([list([4, 5, 6])], dtype=object)

和形状将是(1,),而不是'看到'由列表

表示的第二次元通过运行b.dtype

检查这种情况。

最新更新