关于numpy的总结文章
知识点总结的实在太好:https://www.jianshu.com/p/38857b57effa
矩阵切片:https://blog.csdn.net/syyyy712/article/details/80170069
关于数组和矩阵的一篇总结,只看到三分之一:https://blog.csdn.net/u010852680/article/details/77676895
求和
axis= k ## k的值和shape元组的下标对应。
In [22]: aa = np.array([[1,2],[3,4],[5,6]])
In [23]: np.sum(aa, axis=1)
Out[23]: array([ 3, 7, 11])
In [24]: aa.shape
Out[24]: (3, 2)
In [25]: np.sum(aa, axis=1).shape
Out[25]: (3,)
# 理解
a.sum(axis=1)#表示计算每一行的和, 消去axis=1维度
a.sum(axis=0)#表示计算每一列的和
In [11]: a = np.random.randn(2,3,4)
Out[12]:
array([[[-1.68167972, 0.4663385 , 0.62622837, 0.80299337],
[ 1.23345914, -0.64637775, -0.52522303, 0.68455028],
[-1.73547485, 1.3843521 , -0.12053358, 0.19005805]],
In [12]: a
Out[12]:
array([[[-1.68167972, 0.4663385 , 0.62622837, 0.80299337],
[ 1.23345914, -0.64637775, -0.52522303, 0.68455028],
[-1.73547485, 1.3843521 , -0.12053358, 0.19005805]],
# 高维度求和理解:消去一个维度
# shape是(2,3,4),在维度为2 上求和,所以输出应该是(3,4)
In [13]: np.sum(a, axis =0)
Out[13]:
array([[-1.18331907, -0.85184292, 1.00511665, -0.11033562],
[ 2.17148503, 0.98255046, -0.51967349, 1.59049367],
[-1.56100333, 0.70636215, -0.23493683, 0.43237388]])
# 原维度(2,3,4),求和后的维度是(2,4)
In [14]: np.sum(a, axis =1)
Out[14]:
array([[-2.18369543, 1.20431285, -0.01952824, 1.67760171],
[ 1.61085806, -0.36724315, 0.27003457, 0.23493023]])
切片
a3 = np.matrix([[1,2,0],[3,4,5],[6,7,8]])
print("步长为2切片", a3[::, ::2])
print("a3::",a3[0:2, :1]) #0到1行中,第0个元素k
输出:
步长为2切片
[[1 0]
[3 5]
[6 8]]
a3::
[[1]
[3]]
-----numpy绘图:https://www.jianshu.com/p/de223a79217a
np数组的属性
# list 转 numpy
np.array(a)
# ndarray 转 list
a.tolist()
ndarray.ndim
数组轴的个数,在python的世界中,轴的个数被称作秩
ndarray.shape
数组的维度。这是一个指示数组在每个维度上大小的整数元组。例如一个n排m列的矩阵,它的shape属性将是(2,3),这个元组的长度显然是秩,即维度或者ndim属性
ndarray.size
数组元素的总个数,等于shape属性中元组元素的乘积。
ndarray.dtype
一个用来描述数组中元素类型的对象,可以通过创造或指定dtype使用标准Python类型。另外NumPy提供它自己的数据类型。
ndarray.itemsize
数组中每个元素的字节大小。例如,一个元素类型为float64的数组itemsiz属性值为8(=64/8),又如,一个元素类型为complex32的数组item属性为4(=32/8).
array和matrix的点乘、矩阵乘总结:
1.当相乘的都为数组array时:
d = np.array([[1,2],[3,4]])
f = np.array([[1,2],[3,4]])
d @ f 矩阵乘
np.dot(d,f)矩阵乘。
np.matmul(d,f)矩阵乘。
d*f 对应元素的乘积(点乘),
np.multiply(d,f) 点乘,
2.当相乘的都为矩阵mat时:
d = np.mat([[1,2],[3,4]])
f = np.mat([[1,2],[3,4]])
d*f # 矩阵乘,
np.dot(d,f) # 矩阵乘
d @ f # 矩阵乘
np.multiply(d,f) 点乘,
3.当相乘的既有数组array,又有矩阵mat时:
d = np.array([[1,2],[3,4]])
f = np.mat([[1,2],[3,4]])
d*f # 矩阵乘,
dot(d,f) # 矩阵乘,
multiply(d,f) 点乘,
# 总结
@ 一直为矩阵乘法
np.dot(a, b) 一直为矩阵乘法
np.multiply(d,f) 一直为点乘
4.运算时最好进行矩阵的运算,因为矩阵可以方便的求转置、逆、迹。
A.T #转置
matrix([[ 7, 15],
[10, 22]])
A.I #逆
matrix([[ 5.5 , -2.5 ],
[-3.75, 1.75]])
np.trace(A) #迹 29
关于np.meshgrid的用法解释:网格点坐标矩阵
https://blog.csdn.net/lllxxq141592654/article/details/81532855
asarray 和 array的区别
array和asarray都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会。
np.random.randn(k)
返回包含k个正太分布元素的数组
np.argmax()
根据输入axis参数不同,返回相应最大元素的索引值:
np.argmax(array1, axis=1)#返回第二维度中最大值的下标索引,总个数是m个(一维数量)
https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.argmax.html
gamma = numpy.linalg.matrix_rank(i) #np求秩公式
eigenvalue, eigenvector = numpy.linalg.eig(A)
fig,ax = plt.subplots() # 的意义:fig=plt.figure(); ax=fig.add_subplot(111)
relu函数实现方法
numpy.where(x<0, 0, x)
- np.where
numpy分两种用法,np.where(condition) 和 np.where(conda, x, y)
下面举例第一种的特殊情况。b输出一个元组里面是x和y坐标,指向元素是True。
a = np.array([[True, False],[True, True], [True, True]])
b = np.where(a)
b
>>(array([0, 1, 1, 2, 2], dtype=int64), array([0, 0, 1, 0, 1], dtype=int64))
矩阵之间判断相等
if (np1 == np2).all() : # 判断所有的元素相等
if np1 is np2: # 判断==和id相同。
np.allclose(A,B)
###从照片矩阵中找到相等元素个数
img_sum = np.sum(img == array_list, axis=-1)
上边是我的笔记。我正在学习––>
- newaxis 扩展维度
x1 = x[np.newaxis, :] # 在相应位置添加一个维度
a = np.random.randint(1,8, size=9)
print(a)
print(a.shape)
b = a[np.newaxis, :] # 在前面增加维度
c = a[:, np.newaxis] # 后面增加维度
print(b.shape)
print(c.shape)
d = np.array([]) # 空np
print(d)
print(d.shape)
[1 5 7 3 7 7 7 3 6]
(9,)
(1, 9)
(9, 1)
[]
(0,)
- 填充元素,比如在图片右边和下边填充白色
x = np.ones((4,3,2))
d_y, d_x = 2, 1
x = np.pad(x, ((0, d_y),(0, d_x),(0,0)), 'constant', constant_values=(np.nan, 255))
print(x)
print(x.shape)
[[[ 1. 1.]
[ 1. 1.]
[ 1. 1.]
[255. 255.]]
[[ 1. 1.]
[ 1. 1.]
[ 1. 1.]
[255. 255.]]
[[ 1. 1.]
[ 1. 1.]
[ 1. 1.]
[255. 255.]]
[[ 1. 1.]
[ 1. 1.]
[ 1. 1.]
[255. 255.]]
[[255. 255.]
[255. 255.]
[255. 255.]
[255. 255.]]
[[255. 255.]
[255. 255.]
[255. 255.]
[255. 255.]]]
(6, 4, 2)
- 取numpy中的最大值
# 从第一维中找到最大值
a = np.array([(3,4), (1,8)]).max(axis=0)
a
# array([3, 8])
#从第二维度中找到最大值
a = np.array([(3,4), (1,8),(10, 0)]).max(axis=0)
a
# array([10, 8])