Python数据分析系列之Numpy基础知识第六篇

163 阅读2分钟

这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战

Numpy数组的排序:

In [2]: import numpy as np

In [3]: data = np.array([[4, 1], [2, 3]])

# 按0轴进行升序排序
In [6]: np.sort(data, axis=0)
Out[6]:
array([[2, 1],
       [4, 3]])

# np.sort()返回的是副本,不会对原数组进行修改
In [7]: data
Out[7]:
array([[4, 1],
       [2, 3]])
       
In [11]: data = np.array([[4, 6], [8, 2]])

In [12]: data
Out[12]:
array([[4, 6],
       [8, 2]])
# 默认按最后一轴进行排序
In [13]: np.sort(data)
Out[13]:
array([[4, 6],
       [2, 8]])

In [14]: np.sort(data, axis=0)
Out[14]:
array([[4, 2],
       [8, 6]])

In [15]: data
Out[15]:
array([[4, 6],
       [8, 2]])

# 不区分轴进行排序,会展开为一维数组,然后升序排序
In [16]: np.sort(data, axis=None)
Out[16]: array([2, 4, 6, 8])


In [17]: data
Out[17]:
array([[4, 6],
       [8, 2]])

# ndarray.sort()方法会就地修改原数组
In [19]: data.sort(axis=0)

In [20]: data
Out[20]:
array([[4, 2],
       [8, 6]])

Numpy数组搜索方法:

In [22]: data = np.arange(9).reshape(3,3)

In [23]: data
Out[23]:
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

# 返回数组中最大值所在的索引号
In [24]: np.argmax(data)
Out[24]: 8

In [25]: np.argmax(data, axis=0)
Out[25]: array([2, 2, 2])

In [26]: np.argmax(data, axis=1)
Out[26]: array([2, 2, 2])

Numpy获取不是0的数据的方法:

In [34]: data = np.array([[0, 3, 0], [2, 0, 4], [0, 0, 5]])

In [35]: data
Out[35]:
array([[0, 3, 0],
       [2, 0, 4],
       [0, 0, 5]])

In [36]: np.nonzero(data)
Out[36]: (array([0, 1, 1, 2]), array([1, 0, 2, 2]))

In [37]: data[data > 0]
Out[37]: array([3, 2, 4, 5])

In [38]: (data > 0).nonzero()
Out[38]: (array([0, 1, 1, 2]), array([1, 0, 2, 2]))

Numpy条件搜索并执行数据修改操作:

In [43]: data
Out[43]:
array([[0, 3, 0],
       [2, 0, 4],
       [0, 0, 5]])

# 如果元素!=0,那么元素不变,否则元素加99
In [44]: np.where(data!=0, data, 99+data)
Out[44]:
array([[99,  3, 99],
       [ 2, 99,  4],
       [99, 99,  5]])

# 如果元素!=0,那么元素加1,否则元素加99
In [45]: np.where(data!=0, data+1, 99+data)
Out[45]:
array([[99,  4, 99],
       [ 3, 99,  5],
       [99, 99,  6]])