# 1D array
In [7]: arr = np.arange(4)
In [8]: arr.shape
Out[8]: (4,)
# make it as row vector by inserting an axis along first dimension
In [9]: row_vec = arr[np.newaxis, :] # arr[None, :]
In [10]: row_vec.shape
Out[10]: (1, 4)
# make it as column vector by inserting an axis along second dimension
In [11]: col_vec = arr[:, np.newaxis] # arr[:, None]
In [12]: col_vec.shape
Out[12]: (4, 1)
# adding new axes at 1st, 4th, and last dimension of the resulting array
In [131]: newaxes = (0, 3, -1)
In [132]: arr_5D = np.expand_dims(arr, axis=newaxes)
In [133]: arr_5D.shape
Out[133]: (1, 5, 5, 1, 1)
5条答案
按热度按时间sbtkgmzw1#
简单地说,
numpy.newaxis
用于***将现有数组的维度***增加 * 一个维度 *,使用 * 一次 *。因此,在本发明中,*1D阵列将变为2D阵列
*2D阵列将变为3D阵列
*3D阵列将变为4D阵列
*4D阵列将变为5D阵列
等等。
下面是一个直观的插图,描述了1D数组到2D数组的 * 升级 *。
场景一:
np.newaxis
可能会派上用场,当你想 * 显式 * 转换一个一维数组为 * 行向量 * 或 * 列向量 *,如上图所示。示例:
场景2:当我们想使用numpy broadcasting作为某些操作的一部分时,例如在做一些数组的 * 加法 * 时。
示例:
假设你想添加以下两个数组:
如果您尝试像这样添加这些,NumPy将引发以下
ValueError
:在这种情况下,您可以使用
np.newaxis
来增加其中一个数组的维度,以便NumPy可以broadcast。现在,添加:
或者,您也可以向数组
x2
添加新轴:现在,添加:
注意:注意我们在两种情况下得到相同的结果(但一个是另一个的转置)。
场景3:这类似于场景1。但是,您可以多次使用
np.newaxis
来将数组提升到更高的维度。这种操作有时需要更高阶的数组(* 即,Tensor *)。示例:
作为替代方案,您可以使用具有直观
axis
kwarg的numpy.expand_dims
。更多关于np.newaxis与np.reshape的背景
newaxis
也被称为伪索引,允许将轴临时添加到多数组中。np.newaxis
使用slicing操作符重新创建数组,而numpy.reshape
将数组整形为所需的布局(假设尺寸匹配;这是 * 必须 * 的reshape
发生)。示例
在上面的例子中,我们在
B
的第一个和第二个轴之间插入了一个临时轴(以使用广播)。这里使用np.newaxis
填充缺少的轴,以使broadcasting操作工作。None
代替np.newaxis
;实际上是same objects。P.S.也可以看到这个很棒的答案:newaxis vs reshape to add dimensions
am46iovg2#
什么是
np.newaxis
?np.newaxis
只是Python常量None
的别名,这意味着无论你在哪里使用np.newaxis
,你也可以使用None
:如果你读到的代码使用的是
np.newaxis
而不是None
,那么它就更有描述性了。如何使用
np.newaxis
?np.newaxis
通常用于切片。它指示您要向数组添加额外的维度。np.newaxis
的位置表示我想添加维度的位置。在第一个例子中,我使用了第一维中的所有元素,并添加了第二维:
第二个示例添加一个维度作为第一个维度,然后使用原始数组第一个维度中的所有元素作为结果数组第二维度中的元素:
同样,您可以使用多个
np.newaxis
来添加多个维:有
np.newaxis
的替代品吗?NumPy中还有一个非常相似的功能:
np.expand_dims
,也可用于插入一维:但是考虑到它只是在
shape
中插入1
s,你也可以reshape
数组来添加这些维度:大多数情况下,
np.newaxis
是添加维度的最简单方法,但最好知道替代方法。什么时候使用
np.newaxis
?在几种情况下,添加尺寸标注是有用的:
matplotlib.pyplot.imshow
来显示一个1D数组。a - a[:, np.newaxis]
.这是因为NumPy操作从最后一个维度1开始广播。1如果你想了解更多关于广播规则的信息,NumPy关于这个主题的文档非常好。它还包括一个
np.newaxis
的例子:xzabzqsa3#
你从一维的数字列表开始。一旦使用了
numpy.newaxis
,就可以将其转换为一个二维矩阵,由四行一列组成。然后,您可以使用该矩阵进行矩阵乘法,或者将其用于构建更大的4 x n矩阵。
htzpubme4#
选择元组中的
newaxis
对象用于将结果选择的维度扩展一个单位长度**维度。它不仅仅是将行矩阵转换为列矩阵。
考虑下面的示例:
现在让我们为我们的数据添加新的维度,
你可以看到
newaxis
在这里添加了额外的维度,x1的维度是(3,3),X1_new的维度是(3,1,3)。我们的新维度如何使我们能够进行不同的操作:
加上x1_new和x2,我们得到:
因此,
newaxis
不仅仅是行到列矩阵的转换。它增加了矩阵的维数,从而使我们能够对它进行更多的操作。qzwqbdag5#
它会在它所在的地方变暗。
举例来说:
arr[newaxis]
等于expand_dims(arr, 0)
。arr[:, newaxis]
等于expand_dims(arr, 1)
arr[:, :, newaxis]
等于expand_dims(arr, 2)