标签:占用 多个 dice product ... 不能 数据库 safe 变化
例如: import numpy ndarr1 = numpy.random.randint(0,10.size=5) ndarr1[0] # 取数组中的第一个值, 以此类推 ndarr1[1] ndarr1[-1]
例如: nd = np.random.randint(0,10,size=(5,6)) nd
array([[0, 4, 7, 5, 9, 7], [5, 3, 2, 9, 5, 5], [9, 2, 6, 2, 7, 7], [0, 3, 5, 4, 3, 9], [9, 1, 9, 7, 1, 3]]) nd[0][0] # 普通的索引 # 整数数组索引 nd[0,0] nd[-1,0] nd[-1,] # 往里一个维度 要同时 取出 0 2 4 nd[-1,[0,2,4]] nd[-1,[4,2,0]] # 顺序任意 可以正向取 也可以反向取 还可以随便取 而且可以重复取 nd[-1,[2,4,0]] nd[-1,[2,4,0,0,0,0]]
一维与列表切片完全一致 多维时同理
例如: ndarr = np.random.randint(0,10,size=5) ndarr array([8, 6, 5, 3, 6]) ndarr[1:4] ndarr[0:4] ndarr[:4] ndarr[:]
而且ndarray还支持用,一级一级往里找
ndarr[:2] # 切片也是 从外往里 一级一级切 ndarr[:,0:2] ndarr[1:3,1:4] ndarr[1:3,1:-1]
使用两个:: 的形式 进行切片和翻转
例如: nd = np.random.randint(0,10,size=9) nd array([0, 0, 4, 9, 0, 3, 8, 6, 5]) nd[1:-1:2] # start:stop:step nd[::-1] nd[::-2]
使用reshape函数,注意参数是一个tuple!
nd = np.random.randint(0,10,size=(4,5)) nd array([[2, 5, 0, 9, 6], [0, 1, 3, 3, 8], [5, 3, 9, 7, 8], [6, 0, 9, 8, 8]]) nd.size 20 nd.reshape((5,4)) # 形状可以任意改变 但是size不能变化 nd.reshape((10,2)) nd.reshape((2,10)) # nd.reshape((5,5)) # 25 nd.reshape((20,1)) nd.reshape((-1,1)) # -1指的是自动计算的意思 nd.reshape((1,20)) nd.reshape((1,-1))
np.concatenate()
连结需要注意的点:
# 第一个参数 以元组的形式 传入要拼接的多个ndarr np.concatenate((nd,nd)) # 默认按照纵向拼接 # 第二个参数 axis 用来指定 拼接方向 # np.concatenate((nd,nd),axis=0) # np.concatenate((nd,nd),axis=1) # np.concatenate((nd,nd),axis=-1) # -1是最里层 np.concatenate((nd,nd),axis=-2) #
与级联类似,三个函数完成切分工作:
# ary, indices_or_sections, axis=0 # ary 要切分的数组 # indices_or_sections 用来指定 分成几份 或者 从哪里分 # axis 用来指定切分的方向 np.split()
所有赋值运算不会为ndarray的任何元素创建副本。对赋值后的对象操作也会影响原数组。
可使用copy()函数创建副本,类似于python中的deepcopy
# 对于ndarray对象 凡是涉及到复制后改变 又不希望影响原数组的 都用copy (这是最保险的) nd2 = nd.copy() # 深层copy
Function Name NaN-safe Version Description np.sum np.nansum Compute sum of elements 所有元素的和 np.prod np.nanprod Compute product of elements 所有元素的乘积 np.mean np.nanmean Compute mean of elements np.std np.nanstd Compute standard deviation np.min np.nanmin Find minimum value np.max np.nanmax Find maximum value np.argmin np.nanargmin Find index of minimum value np.argmax np.nanargmax Find index of maximum value np.any N/A Evaluate whether any elements are true np.all N/A Evaluate whether all elements are true
1) 算术运算符:
ndarr = np.random.randint(0,10,size=(4,5)) ndarr array([[4, 5, 8, 3, 0], [9, 4, 4, 1, 5], [9, 6, 4, 0, 1], [6, 1, 6, 4, 9]]) ndarr+1 ... ndarr-1 ... ndarr*2 array([[ 8, 10, 16, 6, 0], [18, 8, 8, 2, 10], [18, 12, 8, 0, 2], [12, 2, 12, 8, 18]])
2) 矩阵积np.dot()
ndarr array([[4, 5, 8, 3, 0], [9, 4, 4, 1, 5], [9, 6, 4, 0, 1], [6, 1, 6, 4, 9]]) # 矩阵的点积 # A矩阵 和 B矩阵 做点积 # A矩阵是m行n列的矩阵 # B矩阵是i行j列的矩阵 # B的行数必须得等于A的列数 i要等于n # 结果是一个 m行 j列的一个矩阵 ndarr2 = np.random.randint(0,10,size=(5,2)) ndarr2 array([[4, 4], [0, 9], [0, 8], [1, 5], [6, 2]])
np.dot(ndarr,ndarr2)
array([[ 19, 140], [ 67, 119], [ 42, 124], [ 82, 119]])
np.sort()与ndarray.sort()都可以,但有区别:
np.partition(a,k)
有的时候我们不是对全部数据感兴趣,我们可能只对最小或最大的一部分感兴趣。
示例: nd = np.random.randint(0,100,size=15) ndarr = np.random.randint(0,100,size=15) ndarr array([83, 57, 43, 83, 95, 73, 95, 7, 46, 26, 86, 47, 59, 45, 64]) # 10个数据库 里面分别有10000商品 # 计算销量最大的前三个 # a, kth a是要排序的数组 kth是要找最大的几个 # np.partition(ndarr,3) # k是3 表示寻找 最小的3个 # np.partition(ndarr,5) # 顺序可能是没有排好的 但是最前面的5个一定是最小的5个 np.partition(ndarr,-5) np.partition(ndarr,-4) array([46, 7, 43, 45, 59, 47, 26, 57, 64, 73, 83, 83, 95, 86, 95])
标签:占用 多个 dice product ... 不能 数据库 safe 变化
原文地址:https://www.cnblogs.com/louyifei0824/p/9918338.html