Numpy数组操作
In [1]:
import numpy as np
排序
In [2]:
a = np.random.randint(1, 100, 50)
a
Out[2]:
array([61, 40, 16, 24, 86, 66, 44, 48, 27, 2, 91, 11, 27, 11, 3, 37, 67,
98, 27, 17, 4, 7, 28, 37, 57, 14, 96, 81, 4, 97, 77, 48, 41, 53,
34, 78, 37, 91, 59, 15, 13, 16, 68, 35, 56, 82, 16, 17, 33, 17])
In [3]:
np.sort(a) # 升序
Out[3]:
array([ 2, 3, 4, 4, 7, 11, 11, 13, 14, 15, 16, 16, 16, 17, 17, 17, 24,
27, 27, 27, 28, 33, 34, 35, 37, 37, 37, 40, 41, 44, 48, 48, 53, 56,
57, 59, 61, 66, 67, 68, 77, 78, 81, 82, 86, 91, 91, 96, 97, 98])
In [5]:
-np.sort(-a) # 降序
Out[5]:
array([98, 97, 96, 91, 91, 86, 82, 81, 78, 77, 68, 67, 66, 61, 59, 57, 56,
53, 48, 48, 44, 41, 40, 37, 37, 37, 35, 34, 33, 28, 27, 27, 27, 24,
17, 17, 17, 16, 16, 16, 15, 14, 13, 11, 11, 7, 4, 4, 3, 2])
多维数组排序
In [6]:
b = np.random.randint(1, 100, (3, 5))
b
Out[6]:
array([[15, 31, 15, 65, 84],
[56, 40, 48, 47, 44],
[ 5, 15, 79, 12, 98]])
In [8]:
np.sort(b, axis=0) # 按0维(行)排序(每一列的行)
Out[8]:
array([[ 5, 15, 15, 12, 44],
[15, 31, 48, 47, 84],
[56, 40, 79, 65, 98]])
In [9]:
np.sort(b, axis=1) # 按1维(列)排序(每一行的列)
Out[9]:
array([[15, 15, 31, 65, 84],
[40, 44, 47, 48, 56],
[ 5, 12, 15, 79, 98]])
数组转置
In [10]:
c = np.arange(15).reshape((3,5))
c
Out[10]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
In [12]:
c.T # 转置
Out[12]:
array([[ 0, 5, 10],
[ 1, 6, 11],
[ 2, 7, 12],
[ 3, 8, 13],
[ 4, 9, 14]])
一维数组不能转置
In [13]:
d = np.arange(3)
d
Out[13]:
array([0, 1, 2])
In [14]:
d.T
Out[14]:
array([0, 1, 2])
In [21]:
# 将数据转为2维,才能转置
d2 = d.reshape(1, 3)
d2
Out[21]:
array([[0, 1, 2]])
In [20]:
d2.T
Out[20]:
array([[0],
[1],
[2]])
In [22]:
# 或者直接转化
d.reshape(3, 1)
Out[22]:
array([[0],
[1],
[2]])
ndarray转为list
.tolist():ndarray转为Python列表,用于和Python原生结合编写程序
In [23]:
e = np.full((2, 3, 4), 25, dtype = np.int32)
e
Out[23]:
array([[[25, 25, 25, 25],
[25, 25, 25, 25],
[25, 25, 25, 25]],
[[25, 25, 25, 25],
[25, 25, 25, 25],
[25, 25, 25, 25]]])
In [24]:
type(e)
Out[24]:
numpy.ndarray
In [27]:
f = e.tolist() # 数组转列表
f
Out[27]:
[[[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]],
[[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]]]
In [28]:
type(f)
Out[28]:
list
In [29]:
# 列表转数组
np.array(f)
Out[29]:
array([[[25, 25, 25, 25],
[25, 25, 25, 25],
[25, 25, 25, 25]],
[[25, 25, 25, 25],
[25, 25, 25, 25],
[25, 25, 25, 25]]])
数组拼接(数组合并)
ndarray是保存在内存中的一段连续值,增加值操作会重新分配内存,一般不推荐,可以用合并数组的方式模拟增加值
将两个或多个数组合并成一个新数组
In [31]:
f = np.array([[1,2,3],[4,5,6],[7,8,9]])
g = np.array([[10,11,12]])
In [32]:
f
Out[32]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
In [33]:
g
Out[33]:
array([[10, 11, 12]])
In [34]:
np.concatenate((f, g), axis=0) # 按0维合并
Out[34]:
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
In [37]:
g
g.T
Out[37]:
array([[10],
[11],
[12]])
In [38]:
np.concatenate((f, g.T), axis=1) # 按1维合并
Out[38]:
array([[ 1, 2, 3, 10],
[ 4, 5, 6, 11],
[ 7, 8, 9, 12]])
数组值删除
删除了视图值,原值没变
删除操作不能精确选取元素,常被索引和切片查询赋值新变量代替
In [39]:
h = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
h
Out[39]:
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
In [40]:
np.delete(h, 0, axis=0) # 按0轴删,删行
Out[40]:
array([[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
In [41]:
np.delete(h, 0, axis=1) # 按1轴删,删列
Out[41]:
array([[ 2, 3, 4],
[ 6, 7, 8],
[10, 11, 12]])
In [43]:
np.delete(h, (2, 3), axis=1) # 删除 2.3 两列
Out[43]:
array([[ 1, 2],
[ 5, 6],
[ 9, 10]])
In [44]:
h # 没有删除原值
Out[44]:
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])