繁体   English   中英

numpy.array([])和numpy.array([[]])有什么区别?

[英]What is the difference between numpy.array([]) and numpy.array([[]])?

为什么我不能在alpha时获得转置但是我可以获得beta版? 额外的[]做什么?

alpha = np.array([1,2,3,4])
alpha.shape
alpha.T.shape

beta = np.array([[1,2,3,4]])
beta.shape
beta.T.shape

从文档( 链接 ):

转置1-D数组会返回原始数组的未更改视图。

阵列[1,2,3,4]是1-D,而阵列[[1,2,3,4]]是1×4 2-D阵列。

第二对括号表示它是一个2D数组,因此对于这样的数组,转置数组与第一个数组不同(因为转置切换了2个维度)。 但是,如果数组只有1D,则转置不会改变任何内容,结果数组等于起始数组。

alpha是一维数组,转置本身。

beta是一个2D数组,因此您可以将(1,n)(n,1)

要对alpha执行相同操作,您需要添加维度,不需要转置它:

alpha[:, None]

alpha是具有形状(4,)的一维数组。 转置只是alpha ,即alpha == alpha.T

beta是具有形状(1,4)的2D阵列。 它是一行,但它有两个维度。 它的转置看起来像一个有形状的柱子(4,1)。

当我到达编程语言世界时,来自“业务的数学方面”,这对我来说似乎也很奇怪。 在考虑了一下后,我意识到从编程的角度来看,它们是不同的。 看看下面的列表:

a = [1,2,3,4,5]

这是一维结构。 这是如此,因为要获取值1,2,3,4和5,您只需要分配一个地址值。 如果您发出了命令a [2],则会返回3。

现在看看这个列表:

b = [[ 1,  2,  3,  4,  5],
     [11, 22, 33, 44, 55]]

例如,要获得11,你需要两个位置编号,1因为11位于第二个列表中而0是因为在第二个列表中它位于第一个位置。 换句话说,b [1,0]给你回报11。

现在来了诀窍部分。 看看第三个清单:

c = [ [ 100, 200, 300, 400, 500] ]

如果仔细观察,每个数字需要从列表中取回2个位置编号。 300例如需要0,因为它位于第一个(也是唯一的)列表中,因为它是第一个列表的第三个元素。 c [0,2]让你回到300。

此列表可以转置,因为它有两个维度,转置操作是切换位置参数的东西。 所以cT会给你一个形状为[5,1]的列表,因为c的形状为[1,5]。

回到列表a。 那里有一个只有一个位置编号的列表。 该列表的形状仅为[5],因此没有第二个位置参数可供使用的转置操作。 因此它仍然[5],如果你尝试aT,你会得到一个。

得到它了?

最好的祝福,

古斯塔沃,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM