前言:本文根据《利用Python进行数据分析》的第三章学习了numpy的基本操作,并加入自己的一些理解和总结,旨在方便以后的查阅,希望能对Python的初学者有所帮助,强烈建议把所有代码手动实现一遍!如有错误欢迎指正。
导入numpy模块
import numpy as np
data1 = [1, 23, 4.3, 54] #创建一个列表
arr1=np.array(data1) #没有说明数据类型,array会自动选取最合适的
print(arr1)
data2 = [[1, 2, 3, 4,],[5, 6, 7, 8]] #嵌套型列表
arr2 = np.array(data2) #产生二维的数组
print(arr2)
arr3 = np.arange(-5,5,1) #与range不同的是arange将直接返回一个ndarray
print(arr3)
[ 1. 23. 4.3 54. ]
[[1 2 3 4]
[5 6 7 8]]
[-5 -4 -3 -2 -1 0 1 2 3 4]
函数 | 说明 |
---|---|
asarray | 将输入转换为ndarray,如果输入本身就是ndarray就不转换 |
arange | 类似于内置的range,但是返回一个ndarray而不是列表 |
ones、ones_like | 根据指定的形状和dtype创建一个全部为1的数值,ones_like以另外一个数组为参数创建一个与它同大小,同类型的全为1的数组 |
zeros、zeros_like | 与ones一样,产生的是全为0的数组 |
empyt、empty_like | 只分配空间但不填充任何值(注意不是全为0的数组,而是一些未初始化的垃圾值) |
eye、identity | 参数为N,创建一个N*N的单位矩阵(对角线为1,其余为0) |
#注意如果要用ones,zeros,empty产生多维数组要传入元组参数如(2,3)
print(np.ones(6))
print("-----------------------")
print(np.ones((2,3)))
print("-----------------------")
print(np.zeros((2,3)))
print("-----------------------")
print(np.zeros_like(arr2)) #参数为一个其他ndarray
print("-----------------------")
print(np.empty(((2,3,2))))
[1. 1. 1. 1. 1. 1.]
-----------------------
[[1. 1. 1.]
[1. 1. 1.]]
-----------------------
[[0. 0. 0.]
[0. 0. 0.]]
-----------------------
[[0 0 0 0]
[0 0 0 0]]
-----------------------
[[[4.94e-322 0.00e+000]
[0.00e+000 0.00e+000]
[0.00e+000 0.00e+000]]
[[0.00e+000 0.00e+000]
[0.00e+000 0.00e+000]
[0.00e+000 0.00e+000]]]
dtype是ndarray的一个特殊对象,存储ndarray的数据类型的信息
常见的数据类型
类型 | 说明 |
---|---|
int8、uint8(16\32\64) | 有符号和无符号的整形 |
float16、float16(32\64\128) | 有符号和无符号的浮点型(浮点型只能近似的表示一些分数值,注意浮点错误) |
complex64(128\256) | 复数 |
bool | True和False的布尔类型 |
object | python的对象类型 |
string_ | 固定长度的字符串(每个字符一个字节),例如出啊年长度为10的字符串则使用S10 |
unicode_ | 固定长度的unicode类型,类似于string_ |
arr1 = np.array([1,2,3],dtype=np.float64) #创建数组时显示得指定数据类型
print(arr1.dtype)
arr2 = np.array([1,2,3],dtype=np.int32) #指定dtype时候不要掉了np.
print(arr2.dtype)
arr3 = np.array(["a","b","c"],dtype=np.object)
print(arr3)
float64
int32
['a' 'b' 'c']
arr = np.array([1,2.5,3,4],dtype=np.int32) #当浮点数遇到int类型会被截断
print(arr)
print(arr.dtype)
float_arr = arr.astype(np.float64)
print(float_arr)
print(float_arr.dtype)
int_arr = float_arr.astype(arr.dtype) #使用别的数组的dtype对象作为参数
print(int_arr.dtype)
[1 2 3 4]
int32
[1. 2. 3. 4.]
float64
int32
基本用法:np.dtype(object,align,copy)
参数 | 含义 |
---|---|
object | 被转换成数据类型的对象 |
align | 如果为True,则向字段添加间隔 |
copy | 是否生成新副本,如果为flase,结果是内建数据类型对象的引用。 |
结构化数据类型
test = np.dtype([("name","S8"),("age","int32"),("score","float32")])
print(test)
[('name', 'S8'), ('age', '
将创建的数据类型用于创建ndarray对象
student1 = np.array([("studentA",19,89.5),("studentB",20,99)])
print(student1)
print(student1.shape)
print("-------------------------")
student2 = np.array([("studentA",19,89.5),("studentB",20,99)],dtype=test)
print(student2)
print(student2.shape) ##注意两个数组的shape的区别,使用test类型的数组只有两个元素
[['studentA' '19' '89.5']
['studentB' '20' '99']]
(2, 3)
-------------------------
[(b'studentA', 19, 89.5) (b'studentB', 20, 99. )]
(2,)
arr = np.arange(10) #注意arange产生的是从0开始的数,故不会包括传入的参数的那个数
print(arr)
print(arr[5]) #用中括号[]进行索引,5索引数组的第6个
print(arr[3:5]) #使用冒号产生的序列是左闭右开的,3:5产生[3,4],索引数组的4,5位置
##如果将一个标量赋值到某一个切片,则会“广播”到整个选区
arr_slice = arr[3:8]
arr_slice[0:3] = 666 #对索引切片赋值
print(arr_slice)
print(arr) #对arr的切片arr_slice操作将会反映到原始数据上
[0 1 2 3 4 5 6 7 8 9]
5
[3 4]
[666 666 666 6 7]
[ 0 1 2 666 666 666 6 7 8 9]
在一个二维数组中各索引位置上的元素不再是标量而是一维数组
arr2d=np.array([[1,2,3],[4,5,6],[6,7,8]])
print(arr2d)
print(arr2d[0])
print(arr2d[0][2])
print(arr2d[0,2])
[[1 2 3]
[4 5 6]
[6 7 8]]
[1 2 3]
3
3
在多维数组中,如果省略了后面的索引,则返回的对象是一个维度低一点的ndarray
arr3d = np.array([[[1,2,3],[1,2,3]],[[4,5,6],[4,5,6]]]) #创建一个2*2(行)*3(列)
print(arr3d)
print('-----------------')
print(arr3d[0]) #第一个二维数组
print(arr3d[0,0]) #第一个二维数组的第一行
print('-----------------')
arr3d[0] = 666 #将一个标量赋值给切片,改变原始数据
print(arr3d)
[[[1 2 3]
[1 2 3]]
[[4 5 6]
[4 5 6]]]
-----------------
[[1 2 3]
[1 2 3]]
[1 2 3]
-----------------
[[[666 666 666]
[666 666 666]]
[[ 4 5 6]
[ 4 5 6]]]
arr2d = np.array([[1,2,3,4],[5,6,7,8]])
print(arr2d)
print('-------------------')
##冒号两边都有数值
print(arr2d[0:1,1:3]) #冒号两边都有数值产生的序列不包括右边的数,0:1产生0
print('-------------------')
##冒号一边有数字一边没有
print(arr2d[:1,1:]) #从头开始或者一直到尾
print('-------------------')
##冒号两边都没有数字
print(arr2d[:,[0,2]]) #单独冒号表示选取整个轴,冒号可以和数字索引一起用
[[1 2 3 4]
[5 6 7 8]]
-------------------
[[2 3]]
-------------------
[[2 3 4]]
-------------------
[[1 3]
[5 7]]
names = np.array(['Bob','Joe','Will','Bob','Will','Joe','Joe']) #创建一个一维名字数组
data = np.random.randn(7,4) #randn函数产生一个7行4列的正态分布随机数
print(data) #data每一行对应names中的每个人的数据
print('----------------------------------------')
##通过布尔索引的方法选取Joe的数据
print(names == 'Joe') #通过比较运算符可以产生一个布尔型数组
print(data[names == 'Joe'])
print('----------------------------------------')
##选取Joe以外的数据,可以使用!= 或者用~对条件进行否定
print(names != 'Joe')
print(data[~(names == 'Joe')])
print('----------------------------------------')
##还可以用&(且)、|(或)联和多个条件
#and和or在布尔数组中无效
data_new = data[(data<-0.5) | (data>0.5)] #将会从data中挑选满足条件的数据生成一个向量
print(data_new)
[[-0.70895383 -0.25364137 -0.74235663 -1.52245216]
[-0.7140899 -0.33776257 0.31585126 0.13717969]
[-0.9607891 -0.67649792 -0.57906685 -0.92532351]
[ 0.50384185 -0.58432576 -0.78138774 -1.5992024 ]
[ 1.68515498 -1.73574284 -0.23303881 -0.67730431]
[ 0.20205852 0.57841884 -0.3866833 0.82587714]
[ 0.94169053 0.11703199 0.61742887 0.64033957]]
----------------------------------------
[False True False False False True True]
[[-0.7140899 -0.33776257 0.31585126 0.13717969]
[ 0.20205852 0.57841884 -0.3866833 0.82587714]
[ 0.94169053 0.11703199 0.61742887 0.64033957]]
----------------------------------------
[ True False True True True False False]
[[-0.70895383 -0.25364137 -0.74235663 -1.52245216]
[-0.9607891 -0.67649792 -0.57906685 -0.92532351]
[ 0.50384185 -0.58432576 -0.78138774 -1.5992024 ]
[ 1.68515498 -1.73574284 -0.23303881 -0.67730431]]
----------------------------------------
[-0.70895383 -0.74235663 -1.52245216 -0.7140899 -0.9607891 -0.67649792
-0.57906685 -0.92532351 0.50384185 -0.58432576 -0.78138774 -1.5992024
1.68515498 -1.73574284 -0.67730431 0.57841884 0.82587714 0.94169053
0.61742887 0.64033957]
arr = np.empty((8,4)) #注意传入的参数是一个元组
for i in range(8):
arr[i] = i
print(arr)
print('-------------------')
##以特定的顺序选取子集,只需要传入指定顺序的整数列表或ndarray
print(arr[[4,3,0,6]])
print('-------------------')
##如果以负数为索引则从后往前数
print(arr[[-3,-1,-4]])
[[0. 0. 0. 0.]
[1. 1. 1. 1.]
[2. 2. 2. 2.]
[3. 3. 3. 3.]
[4. 4. 4. 4.]
[5. 5. 5. 5.]
[6. 6. 6. 6.]
[7. 7. 7. 7.]]
-------------------
[[4. 4. 4. 4.]
[3. 3. 3. 3.]
[0. 0. 0. 0.]
[6. 6. 6. 6.]]
-------------------
[[5. 5. 5. 5.]
[7. 7. 7. 7.]
[4. 4. 4. 4.]]
如果传入多个索引组将会返回一个对应位置的列表
如果要切出指定各轴顺序的一个矩阵
##目标:对arr重构顺序,各维顺序反一下
arr = np.arange(16).reshape((4,4)) #reshape方法的参数是一个列表
print(arr)
print('----------------------')
print(arr[[3,2,1,0],[3,2,1,0]]) #将只会返回对角线上的元素
print('----------------------')
print(arr[[3,2,1,0]][:,[3,2,1,0]]) #切出矩阵的方法1
print('----------------------')
print(arr[np.ix_([3,2,1,0],[3,2,1,0])])#切出矩阵的方法2
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
----------------------
[15 10 5 0]
----------------------
[[15 14 13 12]
[11 10 9 8]
[ 7 6 5 4]
[ 3 2 1 0]]
----------------------
[[15 14 13 12]
[11 10 9 8]
[ 7 6 5 4]
[ 3 2 1 0]]
转置返回的是源数据的视图,不会进行任何复制操作。可以使用transpose方法或者T属性
arr = np.arange(15).reshape((3,5))
print(arr)
print('--------------------')
print(arr.transpose())
print(arr.T) #所有的轴
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
--------------------
[[ 0 5 10]
[ 1 6 11]
[ 2 7 12]
[ 3 8 13]
[ 4 9 14]]
[[ 0 5 10]
[ 1 6 11]
[ 2 7 12]
[ 3 8 13]
[ 4 9 14]]
多维数组的转置
arr = np.arange(16).reshape((2,2,4))
print(arr)
print('-------------------')
print(arr.transpose((0,2,1)))
print('-------------------')
print(arr.transpose((1,0,2)))
print('-------------------')
print(arr.T)
print(arr.transpose(2,1,0)) #两者等价
print('-------------------')
print(arr.swapaxes(1,2)) #行列对调
[[[ 0 1 2 3]
[ 4 5 6 7]]
[[ 8 9 10 11]
[12 13 14 15]]]
-------------------
[[[ 0 4]
[ 1 5]
[ 2 6]
[ 3 7]]
[[ 8 12]
[ 9 13]
[10 14]
[11 15]]]
-------------------
[[[ 0 1 2 3]
[ 8 9 10 11]]
[[ 4 5 6 7]
[12 13 14 15]]]
-------------------
[[[ 0 8]
[ 4 12]]
[[ 1 9]
[ 5 13]]
[[ 2 10]
[ 6 14]]
[[ 3 11]
[ 7 15]]]
[[[ 0 8]
[ 4 12]]
[[ 1 9]
[ 5 13]]
[[ 2 10]
[ 6 14]]
[[ 3 11]
[ 7 15]]]
-------------------
[[[ 0 4]
[ 1 5]
[ 2 6]
[ 3 7]]
[[ 8 12]
[ 9 13]
[10 14]
[11 15]]]
解释一下:
(1,0,2)中的0,1,2分别表示原始数据的0轴,1轴(行),2轴(列)
值 | 原始位置 | 转置后的位置 |
---|---|---|
0 | [0,0,0] | [0,0,0] |
1 | [0,0,1] | [0,0,1] |
2 | [0,0,2] | [0,0,2] |
3 | [0,0,3] | [0,0,3] |
4 | [0,1,0] | [1,0,0] |
5 | [0,1,1] | [1,0,1] |
6 | [0,1,2] | [1,0,2] |
7 | [0,1,3] | [1,0,3] |
8 | [1,0,0] | [0,1,0] |
9 | [1,0,1] | [0,1,1] |
10 | [1,0,2] | [0,1,2] |
11 | [1,0,3] | [0,1,3] |
12 | [1,1,0] | [1,1,0] |
13 | [1,1,1] | [1,1,1] |
14 | [1,1,2] | [1,1,2] |
15 | [1,1,3] | [1,1,3] |
可以发现矩阵中元素的位置第一个和第二个相互调换了
一元ufunc(只传入一个数组作为参数)
函数 | 说明 |
---|---|
abs、fabs | 计算绝对值,如果不是复数用fabs速度更快 |
sqrt | 计算平方根,相当于arr**0.5 |
square | 计算各元素的平方 |
exp | 计算各元素的平方 |
log、log10、log2、log1p | 自然对数,底数为10的对数,底数为2的对数、log(1+x) |
sign | 计算各元素的正负号:1(正数),0(负数),-1(负数) |
ceil | 大于该值得最小整数 |
floor | 小于该值得最大整数 |
rint | 计算各元素的四舍五入到最接近的整数,保留dtype |
modf | 将数组的整数部分和小数部分以两个独立的数组形式返回 |
isnan | 返回一个表示“哪些元素为NaN”的布尔型数组 |
isfinite、isinf | 返回表示哪些元素有穷(非inf且非NaN)或哪些元素是无穷的布尔型数组 |
cos、cosh、sin、sinh、tan、tanh | 普通型和双曲型三角函数 |
二元ufunc(传入两个个数组作为参数)
函数 | 说明 |
---|---|
add | 将数组的对应的元素相加 |
subtract | 将第一个数组中的元素中减去第二个数组的元素 |
multiply | 两个数组对应元素相乘 |
divide、floor_divide | 除法,向下圆整除法(丢弃余数) |
power | 对一个数组中的元素计算第二个数组中对应位置元素的指数次幂 |
maximum、fmax | 元素级别的最大值。fmax将忽略NaN |
minmum、fmin | 元素级别的最小值。fmin将忽略NaN |
mod | 元素级别的求模计算(除法的余数) |
copysign | 将第二个数组中的值得符号赋值给第一个数组中的值 |
greater、greater_equal、less、less_equal、equal、not_equal | 元素级别的比较运算符 |
logical_and、logical_or、logical_xor | 逻辑且或非 |
import numpy as np
import matplotlib.pyplot as plt
points = np.arange(-5,5,0.01)
xs,ys = np.meshgrid(points,points)
z = np.sqrt(xs**2+ys**2) #直接把两个数组当成两个浮点数编写表达式
plt.imshow(z,cmap=plt.cm.gray)
plt.colorbar()
基本用法:
np.where(condition,arr1,arr2)
##全部为数组
cond = [True,False,True,False]
arr1 = [1,2,3,4]
arr2 = [5,6,7,8]
result = np.where(cond,arr1,arr2)
print(result)
##arr为标量,condition为表达式
arr = np.random.randn(4,4)
print(arr)
result2 = np.where(arr>0) #不加arr就会返回满足condition的元素的位置
print(arr[result2]) #相当于arr[arr>0]
result3 = np.where(arr>0,2,-2) #大于0替换为2,小于0替换为-2
print(result3)
[1 6 3 8]
[[-1.81205932 1.42043149 -1.98253756 -1.32045557]
[ 0.80179704 -0.13721308 0.45621985 0.44734455]
[-3.4079512 1.48717493 2.27197121 -1.49444463]
[ 1.00074553 -0.45347556 -0.2535534 -0.27079081]]
[1.42043149 0.80179704 0.45621985 0.44734455 1.48717493 2.27197121
1.00074553]
[[-2 2 -2 -2]
[ 2 -2 2 2]
[-2 2 2 -2]
[ 2 -2 -2 -2]]
arr = np.random.randn(5,4) #生成正态分布数据
##对整个数组求均值
print(arr.mean()) #实例方法调用
print(np.mean(arr)) #numpy的函数调用
print("-----------------------")
##计算某个轴方向的均值,加上axis参数
print(arr.mean(axis=0)) #按列计算均数
print(arr.mean(axis=1)) #按行计算均数
##0长度的数组求和为0,均值为NaN
z = np.array([])
print(z.sum())
print(z.mean())
0.12314046483595358
0.12314046483595358
-----------------------
[ 0.2177185 -0.47398446 0.68319769 0.06563012]
[-1.05646019 -0.15665779 0.28705528 0.54456823 0.99719679]
0.0
nan
C:\Users\yz\Anaconda3\lib\site-packages\ipykernel_launcher.py:12: RuntimeWarning: Mean of empty slice.
if sys.path[0] == '':
C:\Users\yz\Anaconda3\lib\site-packages\numpy\core\_methods.py:80: RuntimeWarning: invalid value encountered in double_scalars
ret = ret.dtype.type(ret / rcount)
注意:如果数组中有缺失值的情况则计算结果都会变成NaN,可以换nansum函数
a = np.array([1,2,np.NaN])
print(a)
print(np.sum(a))
print(np.nansum(a))
print(a.mean())
print(np.nanmean(a)) #自动把缺失剔除,样本量减少成2
[ 1. 2. nan]
nan
3.0
nan
1.5
常用数组统计方法:
方法 | 说明 |
---|---|
sum | 求和,零长度的数组的sum为0 |
mean | 算数平均数,0长度数组mean为NaN |
std、var | 标准差和方差,自由度可调(默认为n) |
argmin、argmax | 分别最小和最大的元素的索引 |
cumsum、cumprod | 累加和累和 |
arr = np.random.randn(100)
print((arr>0).sum()) #标准正态分布一般有约一半大于0
bools = np.array([False,False,True,False])
print(bools.any())
print(bools.all())
51
True
False
arr = np.random.randn(5)
print(arr)
arr.sort() #调用sort方法,对原始数据进行排序
print(arr)
arr2 = np.sort(arr)
print(arr2) #调用numpy的方法,产生副本
##对特定轴排序
arr2d = np.random.randn(4,5)
arr2d.sort(0) #纵向排序(按列)
print(arr2d)
##取上四分位数
large_arr = np.random.randn(1000)
large_arr.sort()
quartile = large_arr[int(0.95 * len(large_arr))]
print(quartile)
[-2.88091758 0.62410985 1.22699226 0.40509877 -0.19889688]
[-2.88091758 -0.19889688 0.40509877 0.62410985 1.22699226]
[-2.88091758 -0.19889688 0.40509877 0.62410985 1.22699226]
[[-0.78683194 -1.01394101 -0.17340087 -1.18691901 -0.70883819]
[-0.53602351 -0.890812 -0.15535201 -0.99046646 0.15046626]
[ 0.96336737 -0.18296109 -0.03872459 -0.28239641 0.74740009]
[ 1.2535721 -0.04418151 1.22633803 0.6967652 0.91461072]]
1.6839265073710565
方法 | 说明 |
---|---|
unique(x) | 计算x和y中的公共元素,并返回有序结果 |
intersect1d(x, y) | 计算x和y的公共元素,并返回有序结果 |
union1d(x, y) | 计算x和y的并集,并返回有序的结果 |
in1d(x, y) | 得到一个表示“x的元素是否存在于y”的布尔型数组 |
setdiff1d(x, y) | 集合的差,即元素在x中且不再y中 |
setxor1d(x, y) | 集合的对称差,即存在于一个数组中但是不同时存在于两个数组中的元素 |
np.unique方法
fruit = np.array(['banana','apple','banana','orange','apple'])
print(np.unique(fruit)) #找出了唯一值而且排序了
ints = np.array([3,2,1,4,5,6,3,4,2,1,3])
print(np.unique(ints))
a = np.unique(ints)
##unique等价于
print(sorted(set(ints))) #set会唯一化数组的值
['apple' 'banana' 'orange']
[1 2 3 4 5 6]
[1, 2, 3, 4, 5, 6]
np.in1d方法
arr = np.array([[1,2,3],[4,5,6]])
b = np.in1d(arr,[1,2])
print(b) #输出的是一维的布尔型数组
[ True True False False False False]
方法 | 使用 |
---|---|
np.save(‘name.npy’,array) | name.npy表示存储路径,.npy可以省略,array表示要存的数组。以未压缩的二进制格式存储 |
np.load(‘name.npy’) | 此处的.npy不能够省略 |
np.savez(‘name.npz’,name1=array1,name2=array2 | 保存多个数组,注意后缀的不同,将数组以关键字的形式存入,给不同的数组不同的name,加载的时候得到类似字典的对象,该对象会对各个数组进行延迟加载 |
np.loadtxt(‘filename’,delimiter=’,’) | 从txt文件中加载数组,delimiter表示文本分隔符类型 |
np.savetxt(‘filename’,array,delimiter=’,’) | 以特定的分隔符把array存储到txt文档中 |
arr1 = np.arange(10)
arr2 = np.arange(15)
np.save('array',arr1)
np.savez('arrays',A=arr1,B=arr2)
np.savetxt('a.txt',arr1,delimiter=',')
print(np.load('array.npy'))
arrays = np.load('arrays.npz')
print(arrays['A'])
print(np.loadtxt('a.txt',delimiter=','))
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
函数 | 说明 |
---|---|
diag | 返回方阵对角线元素的一维数组,或将一维数组转换成方阵 |
dot | 矩阵乘法 |
trace | 计算对角线元素的和 |
det | 计算矩阵的行列式 |
eig | 计算方阵的特征值和特征向量 |
inv | 计算方阵的逆 |
pinv | 计算矩阵的Moore-Penrose伪逆 |
qr | 计算矩阵的QR分解 |
svd | 计算奇异值分解 |
solve | 解线性方程组Ax=b,A要为一个方阵 |
lstsq | 计算Ax=b的最小二乘解 |
x = np.random.randn(5, 5)
mat = x.T.dot(x)
mat_inv = np.linalg.inv(mat)
print(mat_inv.dot(mat)) #矩阵乘以逆矩阵得到单位矩阵
[[ 1.00000000e+00 -4.13145425e-16 2.83577297e-16 -4.01989475e-17
-1.96494157e-16]
[-5.66963589e-17 1.00000000e+00 -1.75198193e-16 7.66816011e-17
1.34956784e-16]
[-5.39608902e-17 5.34348393e-18 1.00000000e+00 1.84203780e-17
-6.43525192e-16]
[-2.78534988e-17 -6.15412021e-18 7.22769643e-17 1.00000000e+00
-2.63494168e-17]
[ 1.84756860e-16 3.39066693e-16 -2.60301339e-16 3.59226477e-17
1.00000000e+00]]
函数 | 作用 |
---|---|
random.seed(a=None, version=2) | 设置随机数生成器种子a |
permutation | 返回一个序列的随机排列或返回一个随机排列的范围 |
random.random() | 生成一个0-1之间的随机浮点数 |
random.uniform(a,b,size=(x,y)) | 生成[a,b]之间的浮点数,随机数数量由size控制 |
random.randint(a,b,size=(x,y)) | 生成[a,b]之间的整数 |
random.randrange(a,b,step) | 在集合[a,b),中以step为基数随机抽取一个数。如random.randrange(0, 20, 2),相当于从[0,2,4,6,…,18]中随机取一个 |
random.choice(sequence) | 从序列中随机抽取其中一个元素,这个序列可以是字符串、列表、元组等。 |
random.shuffle(sequence) | 将列表的元素打乱,洗牌 |
random.sample(sequence,k) | 从序列sequence中随机抽取k个样本出来,原始序列不改变 |
random.randn(a,b) | 产生正态分布的随机数数组(均数0,标准差为1),a、b为各维度的个数 |
random.binomial(n, p, size=None) | 参数为n、p,返回的是n次成功多少次 |
random.normal(loc=0.0, scale=1.0, size=None) | 产生正态(高斯)分布的随机数,loc:均值,scale:标准差 |
random.beta() | 产生Beta分布的随机数 |
random.chisquare | 产生卡方分布的随机数 |
random.gamma() | 产生Gamma分布随机数 |
random.uniform() | 产生[0,1)之间的均匀分布随机数 |