numpy模块学习随手笔记

关于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])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值