Numpy
np.array 和 np.asarray 示例
array 和 asarray 都可以将结构数据转化为ndarray,但是主要区别就是当数据源是
ndarray 时,array仍然会copy出一个副本,占用新的内存,但asarray不会。-
np.square(x)
x 的平方
- np.random.randn(d0, d1, …, dn)是从标准正态分布中返回一个或多个样本值。
-
np.random.normal
a = np.random.normal(0, 1, (5,))
print(a)
# [ 0.42299678 -0.43882681 -0.50141346 -1.65870284 -1.0075773 ]
a = np.random.normal(0, 1, (2,2))
print(a)
#[[-0.50873443 0.78148842]
# [-0.65438103 0.04117247]]
- np.random.rand(d0, d1, …, dn)的随机样本位于[0, 1)中。
- np.arange
-
range
**注意: ** 这个函数和上一个的不同,在于一个在numpy包里,一个没在。
-
np.dot
dot()函数是矩阵乘,而*则表示逐个元素相乘
- np.concatenate
np.std
计算矩阵标准差
a = np.array([[1, 2], [3, 4]])
print(np.std(a)) # 计算全局标准差
print(np.std(a, axis = 0)) # axis=0计算每一列的标准差
print(np.std(a, axis = 1)) # axis=1计算每一行的标准差
- np.tile
对整个数组进行复制拼接
用法:numpy.tile(a, reps)
其中a为数组,reps为重复的次数
print(np.tile([0, 0], 5)) #在列方向上重复[0,0]5次,默认行1次
print(np.tile([0,0],(1,1))) #在列方向上重复[0,0]1次,行1次
print(np.tile([0,0],(2,1))) #在列方向上重复[0,0]1次,行2次
print(np.tile([0,0],(3,1))) #在列方向上重复[0,0]1次,行3次
print(np.tile([0,0],(1,3))) #在列方向上重复[0,0]3次,行1次
print(np.tile([0,0],(2,3))) #在列方向上重复[0,0]3次,行2次
- sum 有两种情况
- 1,python 中自己的sum
- 2,numpy中的sum
print(sum([1, 2, 3, 4])) # 10
a = np.array([[1, 2], [3, 4]])
print(sum(a)) # [4 6] 默认列相加
print(a.sum(axis = 0)) # 列相加 [4 6]
print(a.sum(axis = 1)) # 行相加 [3 7]
- 2,numpy中的sum
a = np.array([[1, 2], [3, 4]])
print(np.sum(a)) # 没有axis参数表示全部相加
print(np.sum(a, 0)) # axis=0表示按上下的方向相加
print(np.sum(a, 1)) # axis=1表示按左右的方向相加
print(np.sum(a) / a.shape[0])
- np.mean
a = np.array([[1, 2], [3, 4]])
print(np.mean(a)) # 对所有元素求均值 -> 2.5
print(np.mean(a, 0)) # 压缩行,对各列求均值 -> [2. 3.]
print(np.mean(a, 1)) # 压缩列,对各行求均值 -> [1.5 3.5]
- np.exp
print(np.exp(0)) # 1.0
print(np.exp(1)) # 2.71828182846
print(np.exp(2)) # 7.38905609893
- np.clip
np.clip(a, a_min, a_max, out=None)
其中a是一个数组,后面两个参数分别表示最小和最大值,怎么用呢,看代码:
x=np.array([1,2,3,5,6,7,8,9])
print(np.clip(x,3,8)) # [3 3 3 5 6 7 8 8]
也就是说clip这个函数将将数组中的元素限制在a_min, a_max之间,大于a_max的就使得它等于 a_max,小于a_min,的就使得它等于a_min。
# 高维数组也是一样的
x=np.array([[1,2,3,5,6,7,8,9],[1,2,3,5,6,7,8,9]])
print(np.clip(x,3,8))
[[3 3 3 5 6 7 8 8]
[3 3 3 5 6 7 8 8]]
- np.log
print(np.log10(100)) # 以 10 为底 -> 2.0
print(np.log(np.e)) # 以 e 为底 -> 1.0
print(np.log2(1024)) # 以 2 为底 -> 10.0
- np.squeeze
(3,) 与 (3,1) 的区别 ?
通过 np.squeeze 可以把 (3,1) 转化为 (3,)
这两者是有很大差别的,需要认真对待,详细看代码吧
a = np.array([1, 2, 3])
print(a.shape) # (3,)
print(a * a) # [1 4 9]
print(a.shape) # (3,)
a = np.array([[1], [2], [3]])
print(a.shape) # (3, 1)
print(a * a)
# [[1]
# [4]
# [9]]
b = a.squeeze()
print(b) # [1 2 3]
print(b * b) # [1 4 9]
print(b.shape) # (3,)
综合一下,看代码
a = np.array([[1], [2], [3]])
b = np.array([1, 2, 3])
print(a.shape) # (3, 1)
print(b.shape) # (3,)
print(a - b)
# [[ 0 -1 -2]
# [ 1 0 -1]
# [ 2 1 0]]
print(b - a)
# [[ 0 1 2]
# [-1 0 1]
# [-2 -1 0]]
print(np.squeeze(a) - b)
# [0 0 0]
- np.transpose 矩阵转置
a = np.array([[1, 2], [3, 4]])
print(a)
# [[1 2]
# [3 4]]
print(np.transpose(a))
# [[1 3]
# [2 4]]
-
np.save & np.load
用于保存数据,例如用回归算法求出权重,可以先 save 到本地,等运行测试集的时候再 load 使用
math
math中的方法不能直接访问,需要导入 math 模块,通过静态对象调用相应方法。
import math
- floor 返回数字的下舍整数。
print("math.floor(-45.17) : ", math.floor(-45.17)) # -> -46
print("math.floor(100.12) : ", math.floor(100.12)) # -> 100
print("math.floor(100.72) : ", math.floor(100.72)) # -> 100
print("math.floor(math.pi) : ", math.floor(math.pi)) # -> 3
- log 返回 x 的自然对数。
math.log(x, base) ,,base -- 可选,底数,默认为 e。
返回 x 的自然对数,x>0
注意与 numpy 中的 log对比!
print("math.log(np.exp(1) ** 5) : ", math.log(np.exp(1) ** 5)) # 5.0
# 前为x, 后为底数
print("math.log(100,10) : ", math.log(100,10)) # 2.0
print("math.log(27,3) : ", math.log(27,3)) # 3.0
print("math.log(1024,2) : ", math.log(1024,2)) # 10.0
time
- time.time() 用于测量程序执行时间
其他
- str 将数字转化为字符串
int 取整函数
print(int(10.3)) # 10
print(int(10.9)) # 10
- argsort 输出由小到大的索引
a = np.array([8, 0, 3, -1, 5])
print(a.argsort()) # [3 1 2 4 0]
b = a.argsort()
print(a[b]) # [-1 0 3 5 8]
- input 从控制台输入数据
a = input('Enter number: ')
print(a)
print(type(a))
- split 用于分隔字符串
split(str="") str 为分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等分隔
str = "abc \ndef \ngh";
print (str.split( )); # ['abc', 'def', 'gh']
str = "abc \nd ef \ng\nh";
print (str.split( )); # ['abc', 'd', 'ef', 'g', 'h']
str = "abc-twe-ter";
print (str.split('-')); # ['abc', 'twe', 'ter']
- append & extend
a = [1, 2, 3]
b = [4, 5, 6]
a.append(b)
print(a) # [1, 2, 3, [4, 5, 6]]
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b)
print(a) # [1, 2, 3, 4, 5, 6]