【发布时间】:2012-04-15 21:00:02
【问题描述】:
我想知道在切片 Python 数组时逗号的用途是什么 - 我有一个似乎可以工作的示例,但对我来说看起来很奇怪的行是
p = 20*numpy.log10(numpy.abs(numpy.fft.rfft(data[:2048, 0])))
现在,我知道在对数组进行切片时,第一个数字是开始,下一个是结束,最后一个是步骤,但是结束数字后面的逗号表示什么?谢谢。
【问题讨论】:
我想知道在切片 Python 数组时逗号的用途是什么 - 我有一个似乎可以工作的示例,但对我来说看起来很奇怪的行是
p = 20*numpy.log10(numpy.abs(numpy.fft.rfft(data[:2048, 0])))
现在,我知道在对数组进行切片时,第一个数字是开始,下一个是结束,最后一个是步骤,但是结束数字后面的逗号表示什么?谢谢。
【问题讨论】:
它被用于从二维数组中提取特定的列。
因此,您的示例将从前 2048 行(0 到 2047)中提取第 0 列(第一列)。但请注意,此语法仅适用于 numpy 数组,不适用于一般的 python 列表。
【讨论】:
__getitem__ 函数实现了相关行为。 Python 只是传入相关参数,但常规的 2D 列表不知道如何处理它。在此处查看更多信息stackoverflow.com/questions/21165751/…
经验 - 使用 numpy 创建一个数组
m = np.fromfunction(lambda i, j: (i +1)* 10 + j + 1, (9, 4), dtype=int)
将如下所示的数组分配给m
array(
[[11, 12, 13, 14],
[21, 22, 23, 24],
[31, 32, 33, 34],
[41, 42, 43, 44],
[51, 52, 53, 54],
[61, 62, 63, 64],
[71, 72, 73, 74],
[81, 82, 83, 84],
[91, 92, 93, 94]])
现在切片
m[:,0]
给我们
array([11, 21, 31, 41, 51, 61, 71, 81, 91])
我可能误解了可汗学院(所以请谨慎对待):
在线性代数方面,
m[:,n]采用nth的列向量 矩阵m
请参阅 Abhranil 的说明,此特定解释如何仅适用于 numpy
【讨论】:
它用一个元组切片。元组的确切含义取决于被切片的对象。在 NumPy 数组中,它对 n 维数组执行 m 维切片。
>>> class C(object):
... def __getitem__(self, val):
... print val
...
>>> c = C()
>>> c[1:2,3:4]
(slice(1, 2, None), slice(3, 4, None))
>>> c[5:6,7]
(slice(5, 6, None), 7)
【讨论】: