python笔记: numpy matrix 随机抽取几行或几列

  • 随机取几行
  • 随机取几列
  • tips
  • 1.生成array
  • 2.array的大小
  • 3.打乱array的2种类似方法, 矩阵为多行时默认打乱行
  • (1) np.random.shuffle(array)
  • (2) np.random.permutation(array)
  • (3) permutation比shuffle在使用上要多注意一个小细节

随机取几行

python代码如下

import numpy as np

array = np.arange(15).reshape((3,5))#看心情随便产生一个3行5列的matrix
print(array)#应该长这样:[[0  1  2  3  4],[5  6  7  8  9],[10  11  12  13  14]]
'''
 [[ 0  1  2  3  4]
  [ 5  6  7  8  9]
  [10  11  12  13  14]]
'''
row_rand_array = np.arange(array.shape[0])#shape[0]是有几行,shape[1]是有几列
print(row_rand_array)#[0 1 2] 相当于行的index 表示有3行

np.random.shuffle(row_rand_array)#将3行对应的3个index [0 1 2] 打乱
row_rand = array[row_rand_array[0:2]]#3个index打乱后取前2个,也就相当于matrix行数打乱后取前2行
print(row_rand)#可能长这样:[[5  6  7  8  9],[0  1  2  3  4]],因为随机所以每次都是不一样的2行
'''
 [[5  6  7  8  9]
  [0  1  2  3  4]]
'''

随机取几列

import numpy as np

array = np.arange(15).reshape((3,5))#看心情随便产生一个3行5列的matrix
print(array)#应该长这样:[[0  1  2  3  4],[5  6  7  8  9],[10  11  12  13  14]]
'''
 [[ 0  1  2  3  4]
  [ 5  6  7  8  9]
  [10  11  12  13  14]]
'''
col_rand_array = np.arange(array.shape[1])#shape[0]是有几行,shape[1]是有几列
print(col_rand_array)#[0 1 2 3 4] 相当于列的index 表示有5列

np.random.shuffle(col_rand_array)#将5列对应的5个index [0 1 2 3 4] 打乱
col_rand = array[:,col_rand_array[0:2]]#5个index打乱后取前2个,也就相当于matrix列数打乱后取前2列
print(col_rand)#可能长这样:[[ 4  2],[ 9  7],[14 12]],因为随机所以每次都是不一样的2列
'''
 [[ 4  2]
  [ 9  7]
  [14 12]]
'''

tips

1.生成array

a = np.arange(3)#起点默认为0,参数3为终点,步长默认为1
print(a)#长这样:[0 1 2]

or

b = np.arange(2,8)#参数2为起点,参数8为终点,步长默认为1
print(b)#长这样:[2 3 4 5 6 7]

or

c = np.arange(4,5,0.2)#参数4为起点,参数5为终点,步长为0.2
print(c)#长这样:[4.  4.2 4.4 4.6 4.8]

or

array=np.array([0,0])
for i in range(5):
    array = np.vstack((array,[i+1,i+1]))
print(array)#长这样:[[0 0],[1 1],[2 2],[3 3],[4 4],[5 5]]
'''
 [[0 0]
  [1 1]
  [2 2]
  [3 3]
  [4 4]
  [5 5]]
'''

or

#一个好玩的函数numpy.eye
# 有 N 等于 int, 没 N 等于 float, M=None 等于 int, 
# k是对角线指数, k = 0 对角线上数字为1, k = 1 矩阵整体向右平移1个单位, k = -1 矩阵整体向左平移1个单位,
# 可以自己把一些参数拿掉试试看, 真的很好玩欸 ~ ~
numpy.eye(N, M=None, k=0, dtype=<class 'float'>, order='C', *, like=None)
d = np.eye(4)# 4乘4矩阵, 对角线为1.0, 其余位置为0.0
print(d)# [[1. 0. 0. 0.],[0. 1. 0. 0.],[0. 0. 1. 0.],[0. 0. 0. 1.]]
'''
 [[1. 0. 0. 0.]
  [0. 1. 0. 0.]
  [0. 0. 1. 0.]
  [0. 0. 0. 1.]]
'''

e = np.eye(4,dtype=int)
print(e)# [[1 0 0 0],[0 1 0 0],[0 0 1 0],[0 0 0 1]]
'''
 [[1 0 0 0]
  [0 1 0 0]
  [0 0 1 0]
  [0 0 0 1]]
'''

f = np.eye(4,k=-1)# 整个矩阵向左移动一格
print(f)# [[0. 0. 0. 0.],[1. 0. 0. 0.],[0. 1. 0. 0.],[0. 0. 1. 0.]]
'''
 [[0. 0. 0. 0.]
  [1. 0. 0. 0.]
  [0. 1. 0. 0.]
  [0. 0. 1. 0.]]
'''

g = np.eye(4,M=3)#只保留前3列
print(g)# [[1. 0. 0.],[0. 1. 0.],[0. 0. 1.],[0. 0. 0.]]
'''
 [[1. 0. 0.]
  [0. 1. 0.]
  [0. 0. 1.]
  [0. 0. 0.]]
'''

2.array的大小

a = np.array([0,0,0])
for i in range(5):
    a = np.vstack((a,[i+1,i+1,i+1]))
print(a)#长这样:[[0 0 0],[1 1 1],[2 2 2],[3 3 3],[4 4 4],[5 5 5]]
'''
 [[0 0 0]
  [1 1 1]
  [2 2 2]
  [3 3 3]
  [4 4 4]
  [5 5 5]]
'''
print(a.shape)# (6, 3),6行3列
print(a.shape[0])# 有6行
print(a.shape[1])# 有3列

3.打乱array的2种类似方法, 矩阵为多行时默认打乱行

(1) np.random.shuffle(array)

arr = np.arange(15).reshape((3,5))
print(arr)# [[ 0  1  2  3  4],[ 5  6  7  8  9],[10 11 12 13 14]]
'''
 [[ 0  1  2  3  4]
  [ 5  6  7  8  9]
  [10 11 12 13 14]]
'''

np.random.shuffle(arr)#默认打乱行,每一行的顺序不变
print(arr)# [[ 5  6  7  8  9],[ 0  1  2  3  4],[10 11 12 13 14]]
'''
 [[ 5  6  7  8  9]
  [ 0  1  2  3  4]
  [10 11 12 13 14]]
'''

(2) np.random.permutation(array)

a = np.random.permutation(10)
print(a)# 可能长这样:[5 1 2 6 7 3 8 9 4 0], 因为每次run都不一样

b = np.random.permutation([1,2,3,4,5])
print(b)# 可能长这样:[2 4 5 1 3], 因为每次run都不一样

c = np.arange(9).reshape((3,3))
print(c)# [[0 1 2],[3 4 5],[6 7 8]]
'''
 [[0 1 2]
  [3 4 5]
  [6 7 8]]
'''

d = np.random.permutation(c)
print(d)# 可能长这样:[[0 1 2],[6 7 8],[3 4 5]], 因为每次run都不一样
'''
 [[0 1 2]
  [6 7 8]
  [3 4 5]]
'''

(3) permutation比shuffle在使用上要多注意一个小细节

要给np.random.permutation指定一个参数下文才能继续使用,不然打乱效果会无效,只是看到这个现象了,具体为什么我还不知道…觉得麻烦的日常用shuffle就好, 效果是一样的, 回到最开始的例子我们一起看一下效果:

row = np.random.permutation(row_rand_array)
 row_rand = array[row[0:2]]
 print(row_rand)
 效果才会和 np.random.shuffle(row_rand_array) 一样col = np.random.permutation(col_rand_array)
 col_rand = array[:,col[0:2]]
 print(col_rand)
 效果才会和 np.random.shuffle(col_rand_array) 一样
array = np.arange(15).reshape((3,5))#3行10列
print(array)# [[ 0  1  2  3  4],[ 5  6  7  8  9],[10 11 12 13 14]]
'''
 [[ 0  1  2  3  4]
  [ 5  6  7  8  9]
  [10 11 12 13 14]]
'''

row_rand_array = np.arange(array.shape[0])
print(row_rand_array)# [0 1 2]

row = np.random.permutation(row_rand_array)#效果和np.random.shuffle(row_rand_array)一样
row_rand = array[row[0:2]]
print(row_rand)# [[10 11 12 13 14],[ 5  6  7  8  9]]
'''
 [[10 11 12 13 14]
  [ 5  6  7  8  9]]
'''
col_rand_array = np.arange(array.shape[1])
print(col_rand_array)#[0 1 2 3 4]

col = np.random.permutation(col_rand_array)#效果和np.random.shuffle(col_rand_array)一样
col_rand = array[:,col[0:2]]
print(col_rand)# [[ 1  4],[ 6  9],[11 14]]
'''
 [[ 1  4]
  [ 6  9]
  [11 14]]
'''