python - A[i] 和 A[i, :] in n-dimensional(n>1) numpy array? 有什么区别

标签 python arrays numpy indexing

假设 X 是一个 n 维 (n>1) numpy 数组。

X[i] 和 X[i,:] 有区别吗?

例如,

X = np.zeros((3,3))

print(X[i])
 #[ 0.  0.  0.]
print(X[i,:])
 #[ 0.  0.  0.]

我觉得完全一样,但我猜,我觉得有一些不同

访问速度方面。

不过我也不是很清楚。

最佳答案

https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#basic-slicing-and-indexing

If the number of objects in the selection tuple is less than N , then : is assumed for any subsequent dimensions.

An integer, i, returns the same values as i:i+1 except the dimensionality of the returned object is reduced by 1. In particular, a selection tuple with the p-th element an integer (and all other entries :) returns the corresponding sub-array with dimension N - 1.

它们是一样的。如另一个答案所示,时间上存在差异,但时间在 ns 中,其中 Python 解析时间和函数调用层可能会有所不同。但我欢迎任何基于对 numpy 代码的实际阅读的更正。

In [190]: X = np.zeros((3,3))
In [191]: X.__array_interface__
Out[191]: 
{'data': (45249072, False),
 'strides': None,
 'descr': [('', '<f8')],
 'typestr': '<f8',
 'shape': (3, 3),
 'version': 3}

切片属性相同:

In [192]: X[0].__array_interface__
Out[192]: 
{'data': (45249072, False),
 'strides': None,
 'descr': [('', '<f8')],
 'typestr': '<f8',
 'shape': (3,),
 'version': 3}
In [193]: X[0,:].__array_interface__
Out[193]: 
{'data': (45249072, False),
 'strides': None,
 'descr': [('', '<f8')],
 'typestr': '<f8',
 'shape': (3,),
 'version': 3}

时间安排:

In [194]: timeit X[0]
172 ns ± 2.43 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
In [195]: timeit X[0,...]
175 ns ± 0.105 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
In [196]: timeit X[0,:]
264 ns ± 15 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

比较返回副本的时间(相对于 View ):

In [199]: timeit X[[0]]
6.73 µs ± 48.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

和列的相同索引:

In [206]: timeit X[:,1]
262 ns ± 5.68 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [207]: timeit X[...,1]
177 ns ± 2.15 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

(对于一个更大的数组,我得到了相同的时间 - 支持任何时间差异发生在解析/设置过程中的想法,而不是在 View 的实际构建过程中。)

关于python - A[i] 和 A[i, :] in n-dimensional(n>1) numpy array? 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52360995/

相关文章:

python - 使用 Python 读取 UTF-8 XML 并将其写入文件

python - Numpy 数组索引与其他数组会产生广播错误

python - 如何将 Numpy 4D 数组保存为 CSV?

python - 如何确定 SelectFromModel() 中用于选择特征的阈值?

python - 如何在子类中键入注释重写的方法?

python - 所有成对的 python

Python 2.7 : how to prevent automatic decoding from hex to string

php - fatal error : Cannot use object of type mysqli_result

javascript - 为什么数组没有显示在文本区域中?

python - 如何读取大型文本文件避免逐行读取::Python