a = np.array([1, 2, 3])
a.shape
(3,)# why not(1,3)?
v1 = np.array([4, 5, 6])[None,:] # what does none over here mean?
v1.shape
(1,3) #why (1,3) here?
为什么形状对一维数组显示不同的答案,这里没有什么意思?
答案 0 :(得分:0)
此处的切片是通过np.newaxis
对象完成的。
它可以采用默认值None
。
np.array([1, 2, 3])
基本上包含3列和1行。
通常,具有单个值的元组最后以','结尾。
np.array([4, 5, 6])[None,:]
使用np.newaxis
对象,该对象可以设置为“无”。
依次显示每一行中的每个元素。
对newaxis对象的引用:numpy.newaxis
newaxis对象可用于所有切片操作中,以创建长度为一的轴。 newaxis是“无”的别名,可以用“无”代替它,结果相同。
答案 1 :(得分:0)
在某些编程语言或框架中,一维数组被认为与其中一个维的长度为1的二维数组相同。
但不是numpy 。
在numpy中,一维数组是这样的:
(n,)
打印为形状(其中n是其唯一尺寸的长度)一个numpy的二维数组是什么:
(m,n)
打印为形状numpy ndarray的shape属性告诉您数组每个维度的长度。
在a = np.array([1, 2, 3])
中,您将创建一个一维数组,而该维的唯一长度为3。
要创建“最近的”二维数组,您必须调用np.array([[1, 2, 3]])
。
在开头注意连续的[[
,在结尾注意连续的]]
。当您打印此二维数组时,这些双括号也会出现。
通常(以可视方式计算出ndarray中维数的数量)在开始(或末尾)处的连续括号的数量。
将None用作numpy中的索引
通常,在Python中,当您对列表进行切片或将其索引到列表中时,您可能习惯于获得相同数量维或更少的结果。 strong>尺寸数。
但是在numpy中,有时可以使用索引符号来构建更高维的ndarray。
当您获取np.array([4, 5, 6])
的结果并用[None, :]
对其进行索引时,这就是您在这里所做的事情。
在numpy中,将None
指定为索引时,它与指定numpy.newaxis
相同。 (它只是numpy.newaxis
的更紧凑的替代方案)
然后,在特定位置(在您的情况下,索引中的位置0)将numpy.newaxis
指定为索引,就像在说:“我想再增加一个维度,长度为1 ,在这个特定位置”
(请注意,在numpy中,单词 axis 和 dimension 在文档中可互换使用。)
在您的情况下,np.array([4, 5, 6])
首先返回一个一维数组,该唯一维的长度为3(因为有3个元素)。
当您随后使用[None, :]
索引到此一维数组时,您的第一个索引None
实际上是在说您要在位置0处添加长度为1的新维度的前缀(即索引中的位置0)。换句话说,您要首先创建一个长度为1的外部数组,而该外部数组的唯一元素将是一个内部数组,并且该内部数组的形状和内容由索引进一步指定,跟随您的None
(在这种情况下,只需跟踪:
)。
(由于此新前缀维的长度始终为1,因此可用于该新维的唯一有效索引将为0)
当您在此新前缀维度上使用索引0时,第二个索引(:
)实际上是指定要获取的内容。通过将:
指定为第二个索引,实际上是在说您希望np.array([4, 5, 6])
的整个结果都出现在新前缀维的位置0。