我正在关注 Python 中科学提案的某些教程,并且我遇到了这种使用索引的方式:
import numpy as np
l=np.array([8,5,2,3])
print(l[:,None])
此打印返回的是:
[[8]
[5]
[2]
[3]]
这段代码的作用很明显,我发现它对我的提议非常有用,但我永远不会想到使用它,因为我不明白这个切片语法在说什么。
谁能解释一下这种切片是如何工作的?
提前致谢。
我正在关注 Python 中科学提案的某些教程,并且我遇到了这种使用索引的方式:
import numpy as np
l=np.array([8,5,2,3])
print(l[:,None])
此打印返回的是:
[[8]
[5]
[2]
[3]]
这段代码的作用很明显,我发现它对我的提议非常有用,但我永远不会想到使用它,因为我不明白这个切片语法在说什么。
谁能解释一下这种切片是如何工作的?
提前致谢。
:
是所有元素的占位符None
,np.newaxis
如果你想切割额外的形状,那么None
会告诉 numpy 创建新维度。
因此,编写示例并避免混淆的正确方法是:
import numpy as np
l = np.array([8, 5, 2, 3])
print(l[:, np.newaxis])
不,这是将数组维度从 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 如何工作以获取更多信息。