Numpy数组操作

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]])
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容