提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
Python中数组的索引方式(二维数组索引,布尔索引)和数组修改(行,列)
import numpy as np
a=np.array([1,2,3,4,5,6])
print(a[[1,3,5]]) #一维数组索引,输出[2 4 6]
print(a[[-1,-2,-3]]) #一维数组索引,输出[6,5,4]
b=np.array(((1,2,3,4,5),(6,7,8,9,10),(11,12,13,14,15),(16,17,18,19,20)))
print(b[2]) #
输出第三行全部元素:[11 12 13 14 15]
print(b[2,:]) #输出第三行全部元素:[11 12 13 14 15]
print(b[:,1]) #输出第二列所有元素:[ 2 7 12 17]
b[2]和b[2,:]输出的结果是一样的,那是否能说明他们是等价的呢?答案是否。
b[2] 返回的是一个一维数组,包含了二维数组 b 的第三行的所有元素。
b[2,:] 返回的是一个一维数组,也包含了二维数组 b 的第三行的所有元素,但是保持了二维数组的结构,即返回一个行向量。
print(b[[1,2],1:3]) #输出第2、3行,第2、3列的元素:[[ 7 8][12 13]]
print(b[1:3,1:3]) #输出第2、3行,第2、3列的元素:[[ 7 8][12 13]]
from numpy import array, nan, isnan
a = array([[1, nan, 2],[4, nan, 3]])
b = a[~isnan(a)]
print(b)
先介绍下引进的几个函数的用法:
nan 提供了处理包含缺失值的数据的方法,如过滤、填充等。
isnan函数中:
如果参数数组中对应位置的元素是 NaN,则返回的布尔数组相应位置的元素为 True。
如果参数数组中对应位置的元素不是 NaN,则返回的布尔数组相应位置的元素为 False。
在这个例子中,isnan(a) 返回的布尔掩码是:
[[False True False]
[False True False]]
~isnan(a)对结果进行取反:
[[ True False True]
[ True False True]]
print(b):
[1. 2. 4. 6.]
为什么数组中每个元素后面有个点? 是因为在 NumPy 中,数组默认情况下被创建为浮点数类型(float)。
import numpy as np
x = np.array([[1,2],[3,4],[5,6]])
y1 = np.delete(x,1,axis=0) #删除第二行元素[3,4]
y2= np.delete(x,1,axis=1) #删除第二列的元素
print(y1)
print("\n")
print(y2)
axis=0代表的是行,1代表的是列
输出结果:
[[1 2]
[5 6]]
[[1]
[3]
[5]]
import numpy as np
x = np.array([[1,2],[3,4],[5,6]])
a = np.append(x,[[7,8]], axis=0) #增加一行
b = np.append(x,[[9],[10],[11]],axis=1) #增加一列
print(a)
print("\n")
print(b)
输出结果:
[[1 2]
[3 4]
[5 6]
[7 8]]
[[ 1 2 9]
[ 3 4 10]
[ 5 6 11]]