numpy随笔

np.take()给定下标取出元素
np.take(c, index) c为目标数组,index为给定下标数组

np.argmax()返回数组中最大元素下标
np.argmin()返回数组中最小元素下标

np.array

import numpy as np  

data = [[1,2,3,4],[2.11,1.2,2.2,3.2],[4,7,8,9],[59,68,65,85]] 
arr = np.array(data) 
print(arr)

np.arange 类似range

>>> np.arange(1,3,0.3)
array([ 1. ,  1.3,  1.6,  1.9,  2.2,  2.5,  2.8])

import numpy as np  
arr = np.arange(8)
L = arr.tolist()
print(arr)
print(type(arr))
print(type(L))
print(L)

[0 1 2 3 4 5 6 7]
<class 'numpy.ndarray'>
<class 'list'>
[0, 1, 2, 3, 4, 5, 6, 7]

ndim dim是维度(Dimension)的缩写,ndim是用来查看数组维度的。

np.shape统计数组各维度数目

import numpy as np  

group = np.array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
print(group)
print(group.shape)

[[1.  1.1]
 [1.  1. ]
 [0.  0. ]
 [0.  0.1]]
(4, 2)

数据类型转换

import numpy as np

arr1 = np.array([1,2,3,4], dtype=np.float64) 
arr2 = np.array([1,2,3,4], dtype=np.int32) 
arr3 = arr2.astype(np.float64)  
print(arr1) 
print(arr2) 
print(arr3)  

[ 1.  2.  3.  4.] 
[1 2 3 4] 
[ 1.  2.  3.  4.]

全零、全一、全空传入

import numpy as np  

arr_0 = np.zeros(8) 
arr_1 = np.ones((3, 8)) 
arr_e = np.empty((2,3,2)) 
print(arr_0) 
print(arr_1) 
print(arr_e)  

[ 0.  0.  0.  0.  0.  0.  0.  0.]  

[[ 1.  1.  1.  1.  1.  1.  1.  1.]  
 [ 1.  1.  1.  1.  1.  1.  1.  1.]  
 [ 1.  1.  1.  1.  1.  1.  1.  1.]]  

[[[  2.05931344e-316   1.87072344e-316]   
  [  1.85828998e-316   1.98442969e-316]   
  [  1.85755284e-316   1.70134311e-316]]   
 [[  1.71304417e-316   2.37875336e-316]   
  [  1.84704347e-316   1.70132375e-316]   
  [  2.46176627e-316   2.34552329e-316]]]

网格数据生成(进制问题)
在这里插入图片描述

生成二位数组

import numpy as np  

a = np.arange(24).reshape((6,4)) 
print(a)  

[[ 0  1  2  3]  
 [ 4  5  6  7]  
 [ 8  9 10 11]  
 [12 13 14 15]  
 [16 17 18 19]  
 [20 21 22 23]]

flatten()可以将二位数组展平成一维数组

print(a.flatten())  

[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

维度转换

a.resize((3,8)) 
print(a)  

[[ 0  1  2  3  4  5  6  7]  
 [ 8  9 10 11 12 13 14 15]  
 [16 17 18 19 20 21 22 23]]

矩阵转置(print(arr.T)也可以)

a = np.arange(24).reshape((6,4)) 
print(a) 
print(a.transpose())  

[[ 0  1  2  3]  
 [ 4  5  6  7]  
 [ 8  9 10 11]  
 [12 13 14 15]  
 [16 17 18 19]  
 [20 21 22 23]]  

[[ 0  4  8 12 16 20]  
 [ 1  5  9 13 17 21]  
 [ 2  6 10 14 18 22]  
 [ 3  7 11 15 19 23]]

矩阵组合()

水平组合
a = np.arange(6).reshape((2,3)) 
b = a * 2 
print(a) 
print(b) 
print(np.hstack((a,b)))  

[[0 1 2]  
 [3 4 5]]  

[[ 0  2  4]  
 [ 6  8 10]]  

[[ 0  1  2  0  2  4]  
 [ 3  4  5  6  8 10]]
 垂直组合
 np.vstack((a,b))

数组计算跟平常一样直接计算 arr+1 arr**2等等

np.random.rand()返回一组[0,1)均匀分布的随机样本

import numpy as np  
data = np.random.rand(5,3)
print(data)

#[[0.72238004 0.58554015 0.62948194]
 [0.40303003 0.93933317 0.05234182]
 [0.18016946 0.06186264 0.96286429]
 [0.48865234 0.8879425  0.63120916]
 [0.50129112 0.70687259 0.00878837]]

import numpy as np  

names = np.array(['tom','bob','bill','jack','tom']) 
arr_bool = names == 'tom' print(arr_bool)  

[ True False False False  True]
如此判定可生成一串布尔值,可作用于维度一样的数组
print(data[arr_bool]) 

#[[0.72238004 0.58554015 0.62948194]
  [0.50129112 0.70687259 0.00878837]]

所以布尔值可以与切片等混用

data[data<0.5]=0利用条件赋值也是可以的
data[names == ‘tom’]=0 布尔赋值也可以
print(arr[[4,3,0,6]]) 可以按自己的意愿根据给出的数组下标输出

import numpy as np  

arr = np.empty((8,4)) 
for i in range(8):     
    arr[i] = i  
print(arr) 
print(arr[[4,3,0,6]])  

[[ 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.]]

在此基础上,也可以选取具体数字

import numpy as np

arr = np.arange(32).reshape(8,4)
print(arr)
print(arr[[1,5,7,2],[0,3,1,2]]) 

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]
 [20 21 22 23]
 [24 25 26 27]
 [28 29 30 31]]

[ 4 23 29 10]

也可以选取行之后调整行内元素位置

import numpy as np  

arr = np.arange(32).reshape(8,4) 
print(arr) 
print(arr[[4,3,0,6]][:,[0,3,1,2]])  
[[ 0  1  2  3]  
 [ 4  5  6  7]  
 [ 8  9 10 11]  
 [12 13 14 15]  
 [16 17 18 19]  
 [20 21 22 23]  
 [24 25 26 27]  
 [28 29 30 31]]  

[[16 19 17 18]  
 [12 15 13 14]  
 [ 0  3  1  2]  
 [24 27 25 26]]

这么做是对数组的深拷贝。

np.dot()矩阵相乘內积
np.sqrt()矩阵內元素开平方根
np.square()矩阵內元素平方
np.multiply(arr1,arr2)两矩阵相乘
print(np.subtract(arr1,arr2))两矩阵相减

np.where 条件运算

where返回的是布尔值,符合条件就返回true arr.compress(arr > 2)返回的是数组
import numpy as np  

arr = np.random.randn(4,4) 
print(arr) 
print(np.where(arr>0,2,-2)) 
print(np.where(arr>0,2,arr))  
#满足条件执行第一个,不满足执行第二个。
[[ 0.19699344 -0.6502777  -1.03611804 -0.43403437]  
 [-1.95661572  0.44830588 -0.98746604 -0.57244612]  
 [ 0.44935834 -0.67782579 -0.49945472 -0.46147115]  
 [-0.26284806 -0.4260144   0.43380332 -0.04461859]] 

[[ 2 -2 -2 -2]  
 [-2  2 -2 -2]  
 [ 2 -2 -2 -2]  
 [-2 -2  2 -2]] 

[[ 2.         -0.6502777  -1.03611804 -0.43403437]  
 [-1.95661572  2.         -0.98746604 -0.57244612]  
 [ 2.         -0.67782579 -0.49945472 -0.46147115]  
 [-0.26284806 -0.4260144   2.         -0.04461859]]
 
 np.where(arr>0)如果是这样的,将返回符合要求元素的下标

arr.mean()求均值
np.average(c, weights=v)加权平均值(c,v 是两个项数一样的数组,求c的平均值v为权重)
np.median()求中位数
np.diff()求后一项与前一项的差值得到比原来数组少一项的新数组
np.std()求标准差
np.log()求对数
np.var()求方差
arr.sum()求和
axis=0纵向求 axis=1横向求
例如这样arr.mean(axis=0)
累和累积不同

import numpy as np  

arr = np.array([[0,1,2],[3,4,5],[6,7,8]]) 
print(arr.cumsum(axis=0)) 
print(arr.cumprod(axis=1))  

[[ 0  1  2]  
 [ 3  5  7]  
 [ 9 12 15]] 

[[  0   0   0] 
 [  3  12  60]  
 [  6  42 336]]

布尔求和(满足条件的参与求和)

import numpy as np

arr = np.random.randn(10)
print(arr)
print((arr>0).sum())  

布尔的与或运算

import numpy as np  

bools = np.array([False,False,True,False]) 
print(bools.any()) 
print(bools.all())  

True 
False

np.loadtext()的用法

传送门

找最大值最小值以及求最大最小值之间的差异

import numpy as np  

c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(1,), unpack=True) 
print(np.max(c)) 
print(np.min(c)) 
print(np.ptp(c))  

181.72 
155.15 
26.57

np.poly1d()详解

传送门

numpy.linspace()用法

传送门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值