Numpy包:array mat
1、数组 array
1.1 random uniform randint choice
tensor → 输入 → randint ❓
random模块:生成随机数
uniform:浮点数
randint:整数
※rand、randn
np.random.uniform(low, high, size)
随机生成指定范围 [low,high) 的 size 大小的浮点数数组。
np.random.choice(array, size, replace=False)
从array中随机选择出size大小的数组。
np.random.random((3,3))
生成随机的小数多维数组(TBD)
import numpy as np
a = np.random.uniform(0, 1, [2,5])
b = np.random.randint(0, 11, [2,5])
print(a)
print(b)
print(type(a)) # <class 'numpy.ndarray'>
import numpy as np
from collections import Counter
a = np.random.randint(0,2,30)
# print(a)
print(Counter(a))
pos_index = np.where(a == 1)[0]
print(len(pos_index))
n_pos = 10
if len(pos_index) > n_pos:
disable_index = np.random.choice(pos_index, size=(len(pos_index) - n_pos), replace=False)
# replace 用来设置是否可以取相同的元素,默认True表示可以取相同数字,False表示必须取不同的数字
a[disable_index] = -1
pos_index = np.where(a == 1)[0]
print(len(pos_index))
1.2 np.dot(x,y)
向量点积&矩阵乘法
x.dot(y) = np.dot(x,y)
1.3 a[i:j:s]
注意:最后一位指的步幅!!!
- s指步幅,缺省取1
- s>0,i缺省取0,j缺省取len(a),取出a[i]-a[j-1]的数据
- s<0,i缺省取-1,j缺省取-1-len(a),反向取数据
- b=a[::-1]:将原向量反向复制
1.4 inf
np.inf :表示+∞,是没有确切的数值的,类型为浮点型
1.5 Counter unique where
np.where(condition) 输出为满足条件的索引,坐标格式为元组tuple,要想直接看到坐标就使用np.where(condition) [0]
TBD
生成只有0和1的随机数组,并统计数组中某个值出现的次数
import numpy as np
from collections import Counter
a = np.random.randint(0,2,10)
print(a)
# 方法一
print(Counter(a))
# 方法二
print(np.unique(a))
for i in np.unique(a):
print(np.sum(a==i))
# 方法三
pos_index = np.where(a == 1)[0]
print(pos_index)
print(len(pos_index))
# 如果是tensor的话,方法四
a = torch.from_numpy(a)
num_pos = (a > 0).sum().float()
print(num_pos)
1.6 python的数组和矩阵乘法
np.array() np.mat()
数据初始化及相互转换
1、array → mat: np.mat(data),data的格式为array
2、mat → array: data.A,data的格式为mat
import numpy as np
a = np.array([[1,2],[3,4]])
print('a type:{}'.format(type(a)))
b = np.mat([[5,6],[7,8]])
print('b type:{}'.format(type(b)))
c = np.mat(a)
print('c type:{}'.format(type(c)))
d = b.A # ⭐
print('d type:{}'.format(type(d)))
np.multiply()
1、数组:执行对应位置数据相乘。
2、矩阵:执行对应位置数据相乘。
import numpy as np
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
c = np.multiply(a, b)
print (c)
a = np.mat(a)
b = np.mat(b)
c = np.multiply(a, b)
print (c)
np.dot()
1、数组:对于秩为1的数组,执行对应位置相乘,然后再相加;对于秩不为1的二维数组,执行矩阵乘法运算。
2、矩阵:执行矩阵乘法运算。
import numpy as np
a = np.array([1,2])
b = np.array([3,4])
c = np.dot(a,b)
print (c)
a = np.array([[1,2],[3,4]])
b = np.array([[5],[6]])
c = np.dot(a,b)
print (c)
a = np.mat(a)
b = np.mat(b)
c = np.dot(a,b)
print (c)
*运算
1、数组:执行对应位置数据相乘。
2、矩阵:执行矩阵乘法运算。
import numpy as np
a = np.array([1,2])
b = np.array([3,4])
c = a*b
print (c)
a = np.array([[1,2],[3,4]])
b = np.array([[5],[6]])
c = a*b
print (c)
a = np.mat(a)
b = np.mat(b)
c = a*b
print (c)
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
c = a*b
print (c)
a = np.mat(a)
b = np.mat(b)
c = a*b
print (c)
1.7 np.concatenate() np.append()
import numpy as np
a=np.array([1,2,3])
b=np.array([11,22,33])
c=np.array([44,55,66])
d=np.concatenate((a,b,c),axis=0) # 默认情况下,axis=0可以不写。因为对于一维数组拼接,axis只能取0啊
print(d)
a=np.array([[1,2,3],[4,5,6]])
b=np.array([[11,21,31],[7,8,9]])
c=np.concatenate((a,b),axis=0)
print(c)
c=np.concatenate((a,b),axis=1) #axis=1表示对应行的数组进行拼接
print(c)
TBD
append
u = np.array(list)
u.shape
len(u)
reshape resize
如何生成数组、矩阵?