[英]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
第二对括号表示它是一个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.