写在前面
最近使用keras做一些东西,然后会经常用到Numpy来进行数组的操作。途中在网上查找了很多操作的相关方法,这里将一些我常用到的方法记录在这,用于遗忘后自己查阅(估计自己以后会经常使用python==),也用于大家查阅。
Numpy数组的创建
特殊矩阵的创建
np.ones() 函数与np.zeros() 函数可以创建任意维度的全1或全0数组。函数参数可按照IDE的提示来进行填写。
创建自列表
具体就是先创建具有数据的列表,然后将其转换为数组。如以下代码所示(我经常这样用==):
import numpy as np
a = [[1,2,3],[4,5,6]]
na = np.array(a)
print(na)
'''
输出为:
[[1 2 3]
[4 5 6]]
'''
Numpy数组的切片
由于python列表是层次嵌套的,所以索引元素方法为a[i][j]
;而Numpy数组为一个整体,其索引方法为a[i, j]
。在此基础上就可以进行切片,比如:
a[i, 0:4]
表示第i
行,第0
到第4
列(不包括第4
列);a[i, :]
表示第i
行;a[-1, :]
表示最后一行;a[:-1, :]
表示除最后一行的所有行;
以上方法同样可用于列。
Numpy数组的排序
将每一行或列排序
使用np.sort() 函数或数组对象本身的sort() 函数,其中np.sort() 不改变原数组对象的顺序,而是返回一个排序后的数组对象。如下代码所示:
代码1 将每一行排序
import numpy as np
a = [[1,3,3],[4,2,6]]
na = np.array(a)
nb = np.sort(na, axis=-1) #axis默认为-1,此时将每一行进行排序
print(na) #na数组并没有改变排序
print(nb) #nb数组为返回排序后的数组
'''
输出为:
[[1 3 3]
[4 2 6]]
[[1 3 3]
[2 4 6]]
'''
代码2 将每一列排序
import numpy as np
a = [[1,3,3],[4,2,6]]
na = np.array(a)
na.sort(axis=0) #axis默认为0,此时将每一列进行排序
print(na) #na数组发生了改变
'''
输出为:
[[1 2 3]
[4 3 6]]
'''
将每一行看作整体,将所有行按照某一列的顺序进行排序
(这个功能我也经常使用==),这里要提一下argsort() 函数,该函数返回数组沿指定轴排序后的索引,我们可以使用某列排序后的索引来排序所有行。使用代码如下:
代码1 argsort()的用法
import numpy as np
a = [[1,3,3],[4,2,6]]
na = np.array(a)
b = na.argsort(axis=0) #获取每一列排序后的索引
print(b)
'''
输出为:
[[0 1 0]
[1 0 1]]
'''
代码2 将所有行按第二列进行排序
import numpy as np
a = [[1,3,3],[4,2,6]]
na = np.array(a)
b = na[na[:,1].argsort()] #获取第二列排序后的索引,再用索引排序所有行
print(b)
'''
输出为:
[[4 2 6]
[1 3 3]]
'''
Numpy数组的拼接
np.concatenate() 函数可以提供数组拼接操作,使用代码如下:
import numpy as np
a = [[1,2],
[3,4]]
b = [[5,6],
[7,8]]
na = np.array(a)
nb = np.array(b)
result = np.concatenate((na,nb),axis=1) #按列拼接,默认axis=0时按行拼接
print(result)
'''
输出为:
[[1 2 5 6]
[3 4 7 8]]
'''