您的位置:首页 > 编程语言 > Python开发

numpy 包用法简单总结

2018-02-08 11:54 423 查看
在文件头部引用numpy包

创建numpy数组
创建一维数组

创建多维数组

利用arange zeros ones empty创建数组

numpy数组的基本操作
数据类型

数组的转置

数组的运算

数组索引与切片
基本方法

切片

布尔索引

其他索引方式

生成数组的副本

官方教程

在文件头部引用numpy包

为了方便引用一般将numpy引用为np:

import numpy as np


创建numpy数组

创建一维数组

nparray = np.array([1,2,3,4,5,6])
print (nparray)
# [1 2 3 4 5 6]
print (nparray.dtype)
# int32
print (nparray.shape)
# (6,)
nparray = np.array([[1,2,3,4,5,6]])
print (nparray.shape)
# (1, 6)


创建多维数组

nparray = np.array([[1.1, 2.2], [3.3, 4.4], [5.5, 6.6]])
print (nparray)
# [[ 1.1  2.2]
#  [ 3.3  4.4]
#  [ 5.5  6.6]]
print (nparray.dtype)
# float64
nparray = np.array([[[6, 6, 6, 6], [6, 6, 6, 6]], [[6, 6, 6, 6], [6, 6, 6, 6]], [[6, 6, 6, 6], [6, 6, 6, 6]]])
print (nparray)
#[[[6 6 6 6]
#  [6 6 6 6]]
#
# [[6 6 6 6]
#  [6 6 6 6]]
#
# [[6 6 6 6]
#  [6 6 6 6]]]
print (nparray.ndim)
# 3
print (nparray.shape)
# (3, 2, 4)


利用arange, zeros, ones, empty创建数组

nparray = np.arange(6)
print (nparray)
# [0 1 2 3 4 5]
nparray = np.arange(1, 7)
print (nparray)
# [1 2 3 4 5 6]
nparray = np.arange(0, 6, 2)
print (nparray)
# [0 2 4]
nparray = np.arange(6).reshape(2, 3)
print (nparray)
# [[0 1 2]
#  [3 4 5]]
nparray = np.zeros(6)
print (nparray)
# [ 0.  0.  0.  0.  0.  0.]
nparray = np.ones([2, 3])
print (nparray)
# [[ 1.  1.  1.]
#  [ 1.  1.  1.]]
nparray = np.empty([3, 2])
print (nparray)
# [[ 0.  0.]
#  [ 0.  0.]
#  [ 0.  0.]]


numpy数组的基本操作

数据类型

nparray = np.array([1.1, 2.2, 3.3, 4.4, 5.5, 6.6], dtype = np.int64)
print (nparray)
# [1 2 3 4 5 6]
print (nparray.dtype)
# int64
nparray = nparray.astype(np.float64)
print (nparray)
# [ 1.  2.  3.  4.  5.  6.]
print (nparray.dtype)
# float64


数组的转置

nparray = np.arange(6).reshape(2, 3)
print (nparray.T)
# [[0 3]
#  [1 4]
#  [2 5]]
print (nparray)
# [[0 1 2]
#  [3 4 5]]
nparray = np.arange(24).reshape(3, 2, 4)
print (nparray)
# [[[ 0  1  2  3]
#   [ 4  5  6  7]]
#
#  [[ 8  9 10 11]
#   [12 13 14 15]]
#
#  [[16 17 18 19]
#   [20 21 22 23]]]
print (nparray.transpose(0, 2, 1))
# [[[ 0  4]
#   [ 1  5]
#   [ 2  6]
#   [ 3  7]]
#
#  [[ 8 12]
#   [ 9 13]
#   [10 14]
#   [11 15]]
#
#  [[16 20]
#   [17 21]
#   [18 22]
#   [19 23]]]
print (nparray.transpose(1, 0, 2))
# [[[ 0  1  2  3]
#   [ 8  9 10 11]
#   [16 17 18 19]]
#
#  [[ 4  5  6  7]
#   [12 13 14 15]
#   [20 21 22 23]]]
print (nparray.transpose(1, 2, 0))
# [[[ 0  8 16]
#   [ 1  9 17]
#   [ 2 10 18]
#   [ 3 11 19]]
#
#  [[ 4 12 20]
#   [ 5 13 21]
#   [ 6 14 22]
#   [ 7 15 23]]]
print (nparray.transpose(2, 0, 1))
# [[[ 0  4]
#   [ 8 12]
#   [16 20]]
#
#  [[ 1  5]
#   [ 9 13]
#   [17 21]]
#
#  [[ 2  6]
#   [10 14]
#   [18 22]]
#
#  [[ 3  7]
#   [11 15]
#   [19 23]]]
print (nparray.transpose(2, 1, 0))
# [[[ 0  8 16]
#   [ 4 12 20]]
#
#  [[ 1  9 17]
#   [ 5 13 21]]
#
#  [[ 2 10 18]
#   [ 6 14 22]]
#
#  [[ 3 11 19]
#   [ 7 15 23]]]
print (nparray.T)
# [[[ 0  8 16]
#   [ 4 12 20]]
#
#  [[ 1  9 17]
#   [ 5 13 21]]
#
#  [[ 2 10 18]
#   [ 6 14 22]]
#
#  [[ 3 11 19]
#   [ 7 15 23]]]
print (nparray)
# [[[ 0  1  2  3]
#   [ 4  5  6  7]]
#
#  [[ 8  9 10 11]
#   [12 13 14 15]]
#
#  [[16 17 18 19]
#   [20 21 22
e8e9
23]]]


transpose函数使我们能够得到数组的更灵活的转置形式,可以看到对于三维数组的转置.T的作用相当于.transpose((2,1,0)),由此可以推断出更高维数组的情况。另外.T和.transpose都不会改变数组本身。

数组的运算

nparray = np.arange(6).reshape(2, 3)
nparray1 = np.ones(6).reshape(2, 3)
print (nparray)
# [[0 1 2]
#  [3 4 5]]
print (nparray1)
# [[ 1.  1.  1.]
#  [ 1.  1.  1.]]
print (nparray*2)
# [[ 0  2  4]
#  [ 6  8 10]]
print (nparray**2)
# [[ 0  1  4]
#  [ 9 16 25]]
print (nparray + nparray1)
# [[ 1.  2.  3.]
#  [ 4.  5.  6.]]
print (nparray > 2)
# [[False False  True]
#  [ True  True  True]]
print (np.dot(nparray, nparray1.T))
# [[  3.   3.]
#  [ 12.  12.]]
print (np.dot(nparray, nparray1))
# ValueError: shapes (2,3) and (2,3) not aligned: 3 (dim 1) != 2 (dim 0)
nparray = np.arange(6)
print (nparray)
# [0 1 2 3 4 5]
print (nparray.T)
# [0 1 2 3 4 5]
print (np.dot(nparray, nparray.T))
# 55
print (np.dot(nparray, nparray))
# 55
nparray = np.arange(6).reshape(1, 6)
print (nparray)
# [[0 1 2 3 4 5]]
print (nparray.T)
# [[0]
#  [1]
#  [2]
#  [3]
#  [4]
#  [5]]
print (np.dot(nparray, nparray.T))
# [[55]]
print (np.dot(nparray.T, nparray))
# [[ 0  0  0  0  0  0]
#  [ 0  1  2  3  4  5]
#  [ 0  2  4  6  8 10]
#  [ 0  3  6  9 12 15]
#  [ 0  4  8 12 16 20]
#  [ 0  5 10 15 20 25]]
print (np.dot(nparray, nparray))
# ValueError: shapes (1,6) and (1,6) not aligned: 6 (dim 1) != 1 (dim 0)


做矩阵乘法时要注意矩阵维度是否匹配,但若数组只有一个维度,则无需转置即可求内积。

数组索引与切片

基本方法

nparray = np.arange(24).reshape(3, 2, 4)
print (nparray)
# [[[ 0  1  2  3]
#   [ 4  5  6  7]]
#
#  [[ 8  9 10 11]
#   [12 13 14 15]]
#
#  [[16 17 18 19]
#   [20 21 22 23]]]
print (nparray[0])
# [[0 1 2 3]
#  [4 5 6 7]]
print (nparray[0][1])
# [4 5 6 7]
print (nparray[0,1])
# [4 5 6 7]
print (nparray[0][1][2])
# 6
print (nparray[0,1,2])
# 6
print (nparray[[0, 1], [0, 1]])
# [[ 0  1  2  3]
#  [12 13 14 15]]
print (nparray[[0, 1], [0, 1], [2, 3]])
# [ 2 15]


切片

nparray = np.arange(36).reshape(4, 3, 3)
print (nparray)
# [[[ 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]]]
print (nparray[1:3])
# [[[ 9 10 11]
#   [12 13 14]
#   [15 16 17]]
#
#  [[18 19 20]
#   [21 22 23]
#   [24 25 26]]]
print (nparray[0:4:2])
# [[[ 0  1  2]
#   [ 3  4  5]
#   [ 6  7  8]]
#
#  [[18 19 20]
#   [21 22 23]
#   [24 25 26]]]
print (nparray[2:4, :2, -1:])
# [[[20]
#   [23]]
#
#  [[29]
#   [32]]]
nparray[2:4, :2, -1:] = -1
print (nparray)
# [[[ 0  1  2]
#   [ 3  4  5]
#   [ 6  7  8]]
#
#  [[ 9 10 11]
#   [12 13 14]
#   [15 16 17]]
#
#  [[18 19 -1]
#   [21 22 -1]
#   [24 25 26]]
#
#  [[27 28 -1]
#   [30 31 -1]
#   [33 34 35]]]
nparray[2:4, :2, -1:] = [[[-2], [-3]], [[-4], [-5]]]
print (nparray)
# [[[ 0  1  2]
#   [ 3  4  5]
#   [ 6  7  8]]
#
#  [[ 9 10 11]
#   [12 13 14]
#   [15 16 17]]
#
#  [[18 19 -2]
#   [21 22 -3]
#   [24 25 26]]
#
#  [[27 28 -4]
#   [30 31 -5]
#   [33 34 35]]]
nparray[2:4, :2, -1] = [[-6, -7], [-8, -9]]
print (nparray)
# [[[ 0  1  2]
#   [ 3  4  5]
#   [ 6  7  8]]
#
#  [[ 9 10 11]
#   [12 13 14]
#   [15 16 17]]
#
#  [[18 19 -6]
#   [21 22 -7]
#   [24 25 26]]
#
#  [[27 28 -8]
#   [30 31 -9]
#   [33 34 35]]]


布尔索引

nparray = np.arange(24).reshape(3, 2, 4)
print (nparray)
# [[[ 0  1  2  3]
#   [ 4  5  6  7]]
#
#  [[ 8  9 10 11]
#   [12 13 14 15]]
#
#  [[16 17 18 19]
#   [20 21 22 23]]]
nparray1 = nparray > 10
print (nparray1)
# [[[False False False False]
#   [False False False False]]
#
#  [[False False False  True]
#   [ True  True  True  True]]
#
#  [[ True  True  True  True]
#   [ True  True  True  True]]]
print (nparray1.dtype)
# bool
nparray1 = (nparray == 6)|(nparray == 8)|(nparray == 10)
print (nparray1)
# [[[False False False False]
#   [False False  True False]]
#
#  [[ True False  True False]
#   [False False False False]]
#
#  [[False False False False]
#   [False False False False]]]
nparray2 = nparray[nparray1]
print (nparray2)
# [ 6  8 10]
nparray2 = nparray[nparray1 == False]
print (nparray2)
# [ 0  1  2  3  4  5  7  9 11 12 13 14 15 16 17 18 19 20 21 22 23]
nparray2 = nparray[~nparray1]
print (nparray2)
# [ 0  1  2  3  4  5  7  9 11 12 13 14 15 16 17 18 19 20 21 22 23]


其他索引方式

nparray = np.arange(24).reshape(3, 2, 4)
print (nparray)
# [[[ 0  1  2  3]
#   [ 4  5  6  7]]
#
#  [[ 8  9 10 11]
#   [12 13 14 15]]
#
#  [[16 17 18 19]
#   [20 21 22 23]]]
print (nparray[[0, 1]])
# [[[ 0  1  2  3]
#   [ 4  5  6  7]]
#
#  [[ 8  9 10 11]
#   [12 13 14 15]]]
print (nparray[[0, 1]][[0]])
# [[[0 1 2 3]
#   [4 5 6 7]]]
print (nparray[[0, 1][0]])
# [[0 1 2 3]
#  [4 5 6 7]]
print (nparray[[0, 1]][0])
# [[0 1 2 3]
#  [4 5 6 7]]
print (nparray[[0, 1]][:, [1]])
# [[[ 4  5  6  7]]
#
#  [[12 13 14 15]]]
print (nparray[[0, 1]][:, [1]][[0]])
# [[[4 5 6 7]]]


生成数组的副本

nparray = np.arange(24).reshape(3, 2, 4)
print (nparray)
# [[[ 0  1  2  3]
#   [ 4  5  6  7]]
#
#  [[ 8  9 10 11]
#   [12 13 14 15]]
#
#  [[16 17 18 19]
#   [20 21 22 23]]]
nparray1 = nparray[0]
print (nparray1)
# [[0 1 2 3]
#  [4 5 6 7]]
nparray2 = nparray[0].copy()
print (nparray2)
# [[0 1 2 3]
#  [4 5 6 7]]
nparray1[0,0] = 100
print (nparray1)
# [[100   1   2   3]
#  [  4   5   6   7]]
print (nparray[0])
# [[100   1   2   3]
#  [  4   5   6   7]]
nparray2[0,0] = 200
print (nparray2)
# [[200   1   2   3]
#  [  4   5   6   7]]
print (nparray[0])
# [[100   1   2   3]
#  [  4   5   6   7]]


采用nparray1=nparray[0]的方式生成的nparray1并不是nparray[0]的副本,而是与nparray[0]共用同一地址的数组,当nparray1的值改变时,nparray[0]也随之改变;采用nparray2 = nparray[0].copy()的方式生成的nparray2是nparray[0]的一个副本,nparray2改变时,nparray[0]不会随之改变。

官方教程

https://docs.scipy.org/doc/numpy-dev/user/quickstart.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  numpy python