Numpy的一些基本操作

1、numpy的数据选取

matrix = numpy.array([['a', 'b', 'c', 'd', 'e'], ['f', 'g', 'h', 'i', 'k'], ['l', 'm', 'n', 'o', 'p'], ['q', 'r', 's', 't', 'u']])
print(matrix)
print(matrix.shape)

先看一下打印出来的结果:

[['a' 'b' 'c' 'd' 'e']
 ['f' 'g' 'h' 'i' 'k']
 ['l' 'm' 'n' 'o' 'p']
 ['q' 'r' 's' 't' 'u']]
(4, 5)

嗯,是一个4行5列的矩阵。

现在要求将'k'这个值取出来,要怎么操作呢?

character_search1 = matrix[1, 4]
print(character_search1)

#运行结果:
k

[1,4]代表的是,第2行的第5个元素(起始数字为0)。这样,我们就把'k'取出来了。同理,我们可以再试试如何取到'm':

character_search2 = matrix[2, 1]
print(character_search2)

#运行结果:
m

 

2、numpy的切片 

类似于python,numpy也可以使用切片的方法来获取数据。可以看看下面这个例子:

vector = numpy.array([1, 2, 3, 4])
print(vector[0:3])

#运行结果:
[1 2 3]

从运行结果来看,numpy的切片和python的切片十分类似。

但是,如果不是取其中的一个值,而是要取一列,要如何操作呢?

matrix = numpy.array([[5, 10, 15], [20, 25, 30], [35, 40, 45]])
print(matrix[:, 2]) #取所有行中的第3列

#运行结果:
[15 30 45]

matrix[:, 2]的是这样理解的,冒号的意思是取全部的行,2的意思是第3列,所以取到了15,30和45。

同理,我们也可以取其中的两列:

matrix = numpy.array([[5, 10, 15], [20, 25, 30], [35, 40, 45]])
print(matrix[:, 0:2]) #取所有行中的第1列和第2列

#运行结果:
[[ 5 10]
 [20 25]
 [35 40]]

matrix[:, 0:2]中,第一个冒号之前表示取所有行,第二个冒号表示列的范围。类似于python中的切片,0:2的范围是0到1,取不到2。

我们再来加一点难度,比如取第1—2行的第1—2列:

matrix = numpy.array([[5, 10, 15], [20, 25, 30], [35, 40, 45]])
print(matrix[0:2, 0:2]) #取1-2行的1-2列

#运行结果:
[[ 5 10]
 [20 25]]

 

3、numpy中的运算

vector = numpy.array([5, 10, 15, 20])
equal_to_ten = (vector == 10) #查看数组中有没有10
print(equal_to_ten)

#运行结果:
[False  True False False]

我们可以看到,如果数组中的元素为10,则返回True,否则返回Flase。

同理,这种运算也可以运用到矩阵当中:

matrix = numpy.array([[5, 10, 15], [20, 25, 30], [35, 40, 45]])
second_column_25 = (matrix[:, 1] == 25)
print(second_column_25)
print(matrix[second_column_25, :])

#运行结果:
[False  True False]
[[20 25 30]]

我们可以将返回的布尔值代入到数组当中,如:print(matrix[second_column_25, :]),以此来求出带有25数字的那一行。

 

4、其他一些判断

先说一说“与”的操作:

vector = numpy.array([5, 10, 15, 20])
equal_to_ten_and_five = (vector == 10) & (vector == 5) #寻找一个值既等于10又等于5
print(equal_to_ten_and_five)

#运行结果:
[False False False False]

结果表明,在数组找不到一个元素既等于10又等于5

再说下“或”的操作:

vector = numpy.array([5, 10, 15, 20])
equal_to_ten_or_five = (vector == 10) | (vector == 5) #寻找一个值等于5或等于10
print(equal_to_ten_or_five)

#运行结果:
[ True  True False False]

结果表明,在数组中的前2个元素,等于10或者等于5。

注意:代码中表示“和”以及“或”的标识是:&和 |