- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我刚刚偶然发现 numpy
中的数组可能由空元组索引:
In [62]: a = arange(5)
In [63]: a[()]
Out[63]: array([0, 1, 2, 3, 4])
我在 numpy wiki ZeroRankArray 上找到了一些文档:
(Sasha) First, whatever choice is made for x[...] and x[()] they should be the same because ... is just syntactic sugar for "as many : as necessary", which in the case of zero rank leads to ... = (:,)*0 = (). Second, rank zero arrays and numpy scalar types are interchangeable within numpy, but numpy scalars can be use in some python constructs where ndarrays can't.
因此,对于 0 维数组,a[()]
和 a[...]
应该是等价的。它们也适用于高维数组吗?它们明显是:
In [65]: a = arange(25).reshape(5, 5)
In [66]: a[()] is a[...]
Out[66]: False
In [67]: (a[()] == a[...]).all()
Out[67]: True
In [68]: a = arange(3**7).reshape((3,)*7)
In [69]: (a[()] == a[...]).all()
Out[69]: True
但是,它不是语法糖。不适用于高维数组,甚至不适用于 0 维数组:
In [76]: a[()] is a
Out[76]: False
In [77]: a[...] is a
Out[77]: True
In [79]: b = array(0)
In [80]: b[()] is b
Out[80]: False
In [81]: b[...] is b
Out[81]: True
然后是用一个空的 list 进行索引的情况,它完全做了其他事情,但看起来等同于用一个空的 ndarray
进行索引:
In [78]: a[[]]
Out[78]: array([], shape=(0, 3, 3, 3, 3, 3, 3), dtype=int64)
In [86]: a[arange(0)]
Out[86]: array([], shape=(0, 3, 3, 3, 3, 3, 3), dtype=int64)
In [82]: b[[]]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
IndexError: 0-d arrays can't be indexed.
因此,看起来 ()
和 ...
相似但不完全相同,使用 []
进行索引意味着完全不同的东西. a[]
或 b[]
是 SyntaxError
。使用列表编制索引记录在 index arrays , 并且有关于元组索引的简短通知 at the end of the same document .
剩下的问题是:
a[()]
和 a[...]
之间的区别是设计使然吗?那什么是设计呢?
(问题有点让人联想到:What does the empty `()` do on a Matlab matrix?)
编辑:
事实上,即使是标量也可以用空元组索引:
In [36]: numpy.int64(10)[()]
Out[36]: 10
最佳答案
A[...]
的处理是一个特例,优化为 always return A
itself :
if (op == Py_Ellipsis) {
Py_INCREF(self);
return (PyObject *)self;
}
任何其他应该等效的东西,例如A[:]
, A[(Ellipsis,)]
, A[()]
, A[(slice(None) ,) * A.ndim]
将返回整个 A
的 View ,其 base
是 A
:
>>> A[()] is A
False
>>> A[()].base is A
True
这似乎是不必要的过早优化,因为 A[(Ellipsis,)]
和 A[()]
总是会给出相同的结果(对A
)。从看https://github.com/numpy/numpy/commit/fa547b80f7035da85f66f9cbabc4ff75969d23cd似乎它最初是必需的,因为使用 ...
进行索引在 0d 数组上无法正常工作(在 https://github.com/numpy/numpy/commit/4156b241aa3670f923428d4e72577a9962cdf042 之前它会将元素作为标量返回),然后扩展到所有数组一致性;从那时起,索引已固定在 0d 数组上,因此不需要优化,但它设法保留下来(并且可能有一些代码依赖于 A[...] is A
being是的)。
关于python - 在 numpy 中,用空元组和省略号索引数组有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14689270/
我正在制作一款打算在 future 进行本地化的软件。我想知道省略号(...指示一个 Action 打开一个新窗口/对话框)通常是如何本地化的。 所有语言都这样使用省略号吗?我可以在自己的代码中安全地
我正在尝试实现以下布局(请参阅下面的屏幕截图)。 如果 SPAN 和 B 都符合条件 - 它们只是一个接一个。 如果没有 - SPAN 有一个省略号,但 B 完全显示(它永远不会大于整个 block
我理解点-点-点的一般含义。当我想创建自己的参数数量未知的函数时,我了解如何使用它。 我不明白它是如何工作的,例如函数 variable.names()。当我执行 ?variable.names 时,
在 jqGrid 中,如果文本不适合并被截断,是否有一种本地方法可以在列末尾显示“...”? 我看到有一个 ui-ellipsis 类,但我很困惑,如果文本被截断,它是否会自动添加,以及一旦调整列大小
我有几个 JS 语法问题。 首先,有什么好的资源可以帮助您快速掌握与以下类似的 JS 语法? 代码中,Q1和Q2是标签吗?另外,...的用途是什么? const Q1: Query = { 'is
我正在阅读一些旧代码,这些代码似乎旨在删除目录中的一系列句点 (......)。它利用 java 正则表达式来完成此操作。这是使用的代码。 input = input.replaceAll( ".*.
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and t
我正在尝试让省略号像这样工作:http://jsfiddle.net/583mK/1/ 有趣的是,它在 jsFiddle 上运行良好。奇怪的是,它提供了完全相同的 HTML/CSS,但它在我的应用程序
我有多个不同长度的标题,我希望它们总是占用 1 行并在它们不适合时留下悬挂点/省略号 (...)。我不能只更改 div 中的文本,因为其中的 h2 每天都会自动更改。 这是我的代码:http://js
有十亿个教程,但不幸的是,没有一个对我有用。我需要一些艺术家姓名在标题中,居中,但带有 css 省略号,所以很长的名字会得到“...”并将被截断。 您可以在此处查看设计:http://www.cphr
这个问题在这里已经有了答案: text overflow ellipsis: avoid word break (3 个答案) 关闭 3 年前。 我正在显示带有省略号的文本。在我当前的 CSS 中,
我要画圈 ,就像这张图片: 我试过这段代码。 .discussion:after { content: '\2807'; font-size: 1em; background: #2d34
我在玩python。我在 IDLE 中使用了以下代码: p = [1, 2] p[1:1] = [p] print p 输出是: [1, [...], 2] 这是什么[…]?有趣的是,我现在可以将其
我对省略号很陌生,但即使我将变量分配为 false,以下内容也会返回 true。 PS:注意 if 条件。 import system.obj.* from elipsis.system; iff(e
我正在使用 alabama 包中的 constrOptim.nl 进行非线性优化。但是,我的问题更多地与传递参数(和点-点-点(省略号/“...”)和可能的 do.call)有关 - 所以我首先给出一
例如,我知道如何使用 numpy 对数组进行切片 v[1, :, :] 现在我想要一个函数将切片 (1,1,None) 作为输入并返回 v[1,:,:] 问题是我不知道如何表示省略号 最佳答案 您可以
我有一个宽度设置为 100%。里面是一个带有文本字符串的 div,如果文本宽度溢出,我想在其中添加省略号。 在 javascript 中,我设置了 的宽度到 的宽度这在加载(或刷新)时工作正常,但
有什么方法可以使用 Angular js 对字符串进行子串并在末尾添加省略号,同时忽略 anchor 标记(如果它位于子字符串内部)? 例如,我的文字是: Lorem Ipsum has been t
我不知道为什么这个简单的CSS无法正常工作... .app a { height: 18px; width: 140px; padding: 0; overflow: hidden;
这个问题在这里已经有了答案: text-overflow is not working when using display:flex (5 个答案) 关闭 3 年前。
我是一名优秀的程序员,十分优秀!