Python中的数组[0]和数组[0:1]有什么区别?

2024-04-23 18:28:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题可能看起来太简单了,但我很想知道为什么Python中可以使用它。你知道吗

假设我们定义了一个大小为(4,3)的数组:

import numpy as np
a=np.random.randint(15,size=(4,3))

结果如下:

array([[ 7,  6,  1],
       [ 5,  3,  6],
       [12, 10, 11],
       [ 1,  3,  4]])

两者之间的区别是什么:

a[0]

Result:
array([7, 6, 1])

以及

a[0:1]

Result:
array([[7, 6, 1]])

因为它们都返回矩阵的相同部分:

7, 6, 1

我知道区别在于前者的形状是(3,),而后者的大小是(1,3)。 但我的问题是为什么我们需要这些形状。如果您熟悉Matlab,那么使用冒号给出一个范围将得到两行,但在Python中,它返回的信息相同,形状不同。有什么意义?有什么好处?你知道吗


Tags: importnumpysize定义asnp矩阵random
3条回答

原因是您可以确信array[x:y]总是返回原始数组的子数组。这样就可以使用它上面的所有数组方法。说你有

map(lambda1, array[x:y])

即使y-x == 1y-x == 0,也可以保证有一个从array[x:y]返回的数组,并且可以对其进行映射。想象一下,如果array[1:2]返回单个项,即array[1]。那么上面代码的行为取决于数组[1]是什么,它可能不是您想要的。你知道吗

array[m:n]返回一个数组,array[0]返回数组的一个元素(我保证,这也会影响NumPy的内容,请继续阅读):

> py -3
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> array = [1,2,3]
>>> array[0]
1
>>> array[0:1]
[1]
>>>

这就是为什么会得到这些结果:

a[0]

Result:

array([7, 6, 1])

and

a[0:1]

Result:

array([[7, 6, 1]])

如果仔细看,第二个返回一个array来包装一个数字列表,而第一个返回一个array来包装一个数字列表。你知道吗

当你对一个强的索引集的开始点感到困惑时,我认为它是一个强的索引集。我相信在Matlab中,开始索引和结束索引都是包含的。你知道吗

你举的例子是: a[0:1]将采用索引0,而不是1。你知道吗

但是,如果您使用a[0:2],您将得到索引0和1处的值,并得到您似乎期望的结果。你知道吗

这也解释了为什么形状是不同的,[0:1]正是你所期望的。它提供了一个行列表,但是该列表只包含一行,因此1的形状是(1, 3)。 相反,[0]只提供一行,而不是行列表。该行有3个元素,因此得到了形状(3,)

相关问题 更多 >