当前位置: 首页 > 知识库问答 >
问题:

x[:]和x之间的差异[...]在Numpy

曹高轩
2023-03-14

我对Numpy中x[:]x[...]之间的区别感到困惑。

例如,我有一个二维数组

[[4, 1, 9],
[5, 2, 0]]

当我尝试打印x[:]x[…]时,它们都给了我相同的输出:

[[4, 1, 9],
  [5, 2, 0]]

但是,当我试图通过添加一个维度来广播它时

print(np.broadcast_to(x[:,None],(2,3,3)))
print(np.broadcast_to(x[...,None],(2,3,3)))

他们给了我不同的结果。

[[[4 1 9]
  [4 1 9]
  [4 1 9]]

 [[5 2 0]
  [5 2 0]
  [5 2 0]]]


[[[4 4 4]
  [1 1 1]
  [9 9 9]]

 [[5 5 5]
  [2 2 2]
  [0 0 0]]]

我试图找出区别,但不能。

共有1个答案

谯乐池
2023-03-14
In [91]: x = np.array([[4, 1, 9],
    ...: [5, 2, 0]])
In [92]: x
Out[92]: 
array([[4, 1, 9],
       [5, 2, 0]])

这些只是一个完整的切片,原始的视图

In [93]: x[:]
Out[93]: 
array([[4, 1, 9],
       [5, 2, 0]])
In [94]: x[...]
Out[94]: 
array([[4, 1, 9],
       [5, 2, 0]])
In [95]: x[:,:]
Out[95]: 
array([[4, 1, 9],
       [5, 2, 0]])

尾随:根据需要添加,但不能提供超过尺寸的数量:

In [96]: x[:,:,:]
Traceback (most recent call last):
  File "<ipython-input-96-9d8949edcb06>", line 1, in <module>
    x[:,:,:]
IndexError: too many indices for array: array is 2-dimensional, but 3 were indexed

“无”添加维度:

In [97]: x[:,None].shape       # after the first
Out[97]: (2, 1, 3)
In [98]: x[...,None].shape     # at the end
Out[98]: (2, 3, 1)
In [99]: x[:,:,None].shape     # after the 2nd
Out[99]: (2, 3, 1)
In [100]: x[:,None,:].shape    # same as 97
Out[100]: (2, 1, 3)
In [101]: x[None].shape        # same as [None,:,:] [None,...]
Out[101]: (1, 2, 3)

使用标量索引

In [102]: x[1,:]          # same as x[1], x[1,...]
Out[102]: array([5, 2, 0])
In [103]: x[...,1]        # same as x[:,1]
Out[103]: array([1, 2])
 类似资料:
  • 问题内容: 在下一个稳定的AngularJS发行时,我将应用程序从 1.0.8 迁移到 1.2 。 在AngularJS 1.0.8中 ,可以为诸如的指令设置隔离范围。然后,该指令将使用其自己的功能而不是控制器的功能。 Java脚本 在AngularJS 1.2中, 此行为不再起作用。单击该按钮将立即激活控制器的功能。 参见以下jsFiddle比较: 角1.0.8 角1.2.0 到底发生了什么变化

  • 问题内容: 我的教授最近说,尽管并且显然会给出相同的结果,但是在JVM中实现它们的方式有所不同。这是什么意思?编译器是否不像:嘿,我明白了,所以我将其切换到并继续吗? 我怀疑在效率方面是否存在差异,但是如果在这些情况下组装会有所不同,我将感到惊讶… 问题答案: 我的教授最近说,尽管x = x + 1和x ++显然会给出相同的结果 我想你的教授也许是故意 的-after 和will 的价值是相同的

  • 问题内容: 好的,所以我使用了很多输入命令,并且我了解在Python2中我可以做到: 但是现在我使用Python 3,我想知道两者之间有什么区别: 和: 我什么时候必须使用一个或另一个? 问题答案: 在Python 3.x中,成为,并删除了Python2.x 。因此,通过在3.x中执行此操作: 您基本上是在2.x中执行此操作: 在3.x中执行以下操作: 与在2.x中执行此操作相同: 以下是Pyth

  • 我希望通过Dockerfile将nodejs安装到基于debian的容器中。我对那里的不同发行版有点困惑。我已经得出结论,我想要最新的稳定发行版。 现在,在nodesource/distributions#deb中有四种不同的发行版(v0.10、v0.12、v4.x、v5.x)。据我所知,我需要v5。x(通过阅读这篇博文,以及我在谷歌上搜索到的其他随机信息)。但无论我在哪里寻找,人们都建议安装v0

  • 问题内容: 我有一个基于JSF 1.2的webapp,从中复制了JSTL导入 您也可以在Internet上的许多地方找到此导入。我不记得是否在我以前的Web项目上合作与否,在任何情况下,它不工作,我目前的JSF 2.0 Web应用基础。我从集装箱收到警告说: 警告:此页面需要使用前缀c声明的XML名称空间http://java.sun.com/jstl/core,但该名称空间不存在标记库。 然后,

  • 但是,这段代码是有效的: 所以我的问题是,import和variable/require方法的作用有什么不同?我想解决困扰我在项目上的导入的任何问题,因为这似乎可能会导致更多的问题。