numpy常用知识速查

Posted Rainbowman 0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了numpy常用知识速查相关的知识,希望对你有一定的参考价值。

1. numpy数据类型

2. numpy创建空数组

# 值为随机
x = np.empty((3,5), dtype=np.int8)
x

# 结果

array([[  16,   71,   73, -119,   51],
       [   2,    0,    0,  112,  -78],
       [  54, -122,   51,    2,    0]], dtype=int8)

创建全0和全1的数组为

x = np.zeros((3,5), dtype=np.int8)
x = np.ones((3,5), dtype=np.int8)

3. numpy.arrange()和numpy.linspace()

numpy.arange(start, stop, step, dtype)

x = np.arange(0,10,2,dtype=np.float)
print(x)

# 结果
[0. 2. 4. 6. 8.]
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

x = np.linspace(10,20,20,dtype=np.float)
print(x)

# 结果
[10.         10.52631579 11.05263158 11.57894737 12.10526316 12.63157895
 13.15789474 13.68421053 14.21052632 14.73684211 15.26315789 15.78947368
 16.31578947 16.84210526 17.36842105 17.89473684 18.42105263 18.94736842
 19.47368421 20.        ]

np.arange()是设置间距,而np.linspace()是设置数量。

4. numpy的布尔索引

x = np.arange(20)
y = np.arange(40)
x = x.reshape(2,10)
y = y.reshape(2,10,2)
print('x为:\\n', x)
print('y为:\\n', y)
print('过滤后的x:\\n', x[x>5])
print('过滤后的y:\\n', y[y>5])

# 结果
x为:
 [[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]]
y为:
 [[[ 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]
  [32 33]
  [34 35]
  [36 37]
  [38 39]]]
过滤后的x:
 [ 6  7  8  9 10 11 12 13 14 15 16 17 18 19]
过滤后的y:
 [ 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 32 33 34 35 36 37 38 39]

5. 遍历多维数组的每一个元素(ndarray.flat)

x = np.arange(100).reshape(10,10)
for i in x.flat:
    print(i, end=' ')

# 结果
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 

6. 扩展数组的维度numpy.expand_dims(array, axis)

x = np.arange(20).reshape(5,4)
print('x的形状为:', x.shape,'\\n')
y = np.expand_dims(x, axis=0)
print('y的形状为:', y.shape,'\\n')

# 结果
x的形状为: (5, 4) 

y的形状为: (1, 5, 4) 

在将图片数据输入神经网络时,有时需要将(Channel,Height,Width)类型的图片数据转换成(Number,Channel,Height,Width),这时就可以用np.expand_dims()函数了。

7. 删除数组中的一维的轴np.squeeze()

x = np.arange(20).reshape(1,5,1,4,1)
print('x的形状为:', x.shape,'\\n')
x = np.squeeze(x)
print('x的形状为:', x.shape,'\\n')

# 结果
x的形状为: (1, 5, 1, 4, 1) 

x的形状为: (5, 4) 

8. 链接相同形状的数组np.concatenate()

x = np.arange(20).reshape(1, 5, 4)
y = np.arange(20,40).reshape(1, 5, 4)
print('x的形状为:', x.shape,'\\n')
print('y的形状为:', y.shape,'\\n')
a = np.concatenate((x,y), axis=0)
print('a的形状为:', a.shape,'\\n')
print(a)

# 结果

x的形状为: (1, 5, 4) 

y的形状为: (1, 5, 4) 

a的形状为: (2, 5, 4) 

[[[ 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]
  [32 33 34 35]
  [36 37 38 39]]]

9. 堆叠相同形状的数组np.stack()

用法和np.concatenate()类似,但:
np.concatenate()不会增加数组的轴数量,只是在原来的数组后面塞入新的数组;
而np.stack()会在axis=0处新加一个轴:

x = np.arange(20).reshape(5, 4)
y = np.arange(20,40).reshape(5, 4)
print('x的形状为:', x.shape,'\\n')
print('y的形状为:', y.shape,'\\n')
a = np.stack((x,y), axis=0)
print('a的形状为:', a.shape,'\\n')
print(a)

# 结果
x的形状为: (5, 4) 

y的形状为: (5, 4) 

a的形状为: (2, 5, 4) 

[[[ 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]
  [32 33 34 35]
  [36 37 38 39]]]

10. 在数组末尾添加值np.append()

说明:只有在x.shape = (n, a, b),y.shape=(m, a, b)时,才可以用np.append(),且必须指定axis=0,否则会变成一维数组

x = np.arange(20).reshape(5, 4)
y = np.arange(20,40).reshape(5, 4)
x = np.expand_dims(x, axis=0)
y = np.expand_dims(y, axis=0)
print('x的形状为:', x.shape,'\\n')
print('y的形状为:', y.shape,'\\n')
a = np.append(x, y, axis = 0)
print('a的形状为:', a.shape,'\\n')
b = np.append(a, x, axis=0)
print('b的形状为:', b.shape,'\\n')
print(b)

# 结果
x的形状为: (1, 5, 4) 

y的形状为: (1, 5, 4) 

a的形状为: (2, 5, 4) 

b的形状为: (3, 5, 4) 

[[[ 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]
  [32 33 34 35]
  [36 37 38 39]]

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

11. 删除某一行或某一列np.delete()

x = np.arange(20).reshape(5, 4)
print('x是:\\n', x)
y = np.delete(x, 1, axis=0) # 删除第一行
z = np.delete(x, 1, axis=1) # 删除第一列
print('删除第一行:\\n', y)
print('删除第一列:\\n', z)
a = np.delete(x, [0,1], axis=0) # 删除第0和1行
print('删除第0行和第1行:\\n', a)

# 结果
x是:
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]]
删除第一行:
 [[ 0  1  2  3]
 [ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]]
删除第一列:
 [[ 0  2  3]
 [ 4  6  7]
 [ 8 10 11]
 [12 14 15]
 [16 18 19]]
删除第0行和第1:
 [[ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]]

12. 去除重复值np.unique(arr)

如果arr不是一维数组,则会被展开

x = np.array([[1,2,3],[4,5,6],[1,2,9]])
print('x是:\\n', x)
y = np.unique(x)
print('去重后:\\n', y)

# 结果
x是:
 [[1 2 3]
 [4 5 6]
 [1 2 9]]
去重后:
 [1 2 3 4 5 6 9]

13. numpy取整函数

np.around():四舍五入
np.floor():向下取整
np.ceil():向上取整

14. 求最大/最小值

14.1 返回元素:np.amax()/np.amin()

# np.amin():求最小值
# np.amax():求最大值
x = np.array([[1,2,3],[4,5,6],[7,8,9]])
print('x\\n', x)
print('amin()\\n',np.amin(x, axis=1)) # 求每一行的最小值
print('amin()\\n',np.amin(x, axis=0)) # 求每一列的最小值
print('amin()\\n',np.amin(x))         # 求所有元素的最小值
# np.amax()用法同理

# 结果
x
 [[1 2 3]
 [4 5 6]
 [7 8 9]]
amin()
 [1 4 7]
amin()
 [1 2 3]
amin()
 1

14.2 返回索引:np.argmin()/np.argmax()

# np.amin():求最小值
# np.amax():求最大值
x = np.random.randint(1,100, size=(3,3))
print('x\\n', x)
print('argmin()【axis=1】\\n',np以上是关于numpy常用知识速查的主要内容,如果未能解决你的问题,请参考以下文章

常用知识速查

opencv-python常用知识速查

10000字的Pandas核心操作知识大全!

Matplotlib常用知识速查

opencv-python常用知识速查

基础知识 - 常用正则表达式最强整理(速查手册)