0

我正在关注 Python 中科学提案的某些教程,并且我遇到了这种使用索引的方式:

import numpy as np
l=np.array([8,5,2,3])
print(l[:,None])

此打印返回的是:

[[8]
 [5]
 [2]
 [3]]

这段代码的作用很明显,我发现它对我的提议非常有用,但我永远不会想到使用它,因为我不明白这个切片语法在说什么。

谁能解释一下这种切片是如何工作的?

提前致谢。

4

2 回答 2

0

:是所有元素的占位符Nonenp.newaxis如果你想切割额外的形状,那么None会告诉 numpy 创建新维度。

因此,编写示例并避免混淆的正确方法是:

import numpy as np
l = np.array([8, 5, 2, 3])
print(l[:, np.newaxis])
于 2018-01-15T17:09:23.587 回答
0

不,这是将数组维度从 1D 放大到 2D,准确地说是列向量。最常见的方法是使用None or np.newaxis

In [317]: l = np.array([8,5,2,3])

In [318]: l[:, np.newaxis]
Out[318]: 
array([[8],
       [5],
       [2],
       [3]])

In [319]: l.shape
Out[319]: (4,)

In [320]: l[:, np.newaxis].shape
Out[320]: (4, 1)

但是,您也可以使用以下方法将其转换为行向量:

In [321]: l[np.newaxis, :]
Out[321]: array([[8, 5, 2, 3]])

In [322]: (l[np.newaxis, :]).shape
Out[322]: (1, 4)

因此,:意味着在切片操作期间沿特定轴从数组中选择所有元素。

查看np.newaxis 如何工作以获取更多信息。

于 2018-01-15T17:10:58.827 回答