【Python】Numpy 笔记 2

 

numpy-data

 

 

 

简单的数组表达式

In [2]:
import numpy as np
In [3]:
# meshgrid 方法 输入两个一维数组,输出两个互为转置矩阵的二维数组
narr = np.arange(5)
print(np.meshgrid(narr, narr))
 
[array([[0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4]]), array([[0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1],
       [2, 2, 2, 2, 2],
       [3, 3, 3, 3, 3],
       [4, 4, 4, 4, 4]])]
In [5]:
points = np.arange(-5, 5, 0.01)
x, y = np.meshgrid(points, points)
print(x)
print(y)
print("******************************")
z = np.sqrt(x ** 2 + y ** 2)
print(z)
 
[[-5.   -4.99 -4.98 ...  4.97  4.98  4.99]
 [-5.   -4.99 -4.98 ...  4.97  4.98  4.99]
 [-5.   -4.99 -4.98 ...  4.97  4.98  4.99]
 ...
 [-5.   -4.99 -4.98 ...  4.97  4.98  4.99]
 [-5.   -4.99 -4.98 ...  4.97  4.98  4.99]
 [-5.   -4.99 -4.98 ...  4.97  4.98  4.99]]
[[-5.   -5.   -5.   ... -5.   -5.   -5.  ]
 [-4.99 -4.99 -4.99 ... -4.99 -4.99 -4.99]
 [-4.98 -4.98 -4.98 ... -4.98 -4.98 -4.98]
 ...
 [ 4.97  4.97  4.97 ...  4.97  4.97  4.97]
 [ 4.98  4.98  4.98 ...  4.98  4.98  4.98]
 [ 4.99  4.99  4.99 ...  4.99  4.99  4.99]]
******************************
[[7.07106781 7.06400028 7.05693985 ... 7.04988652 7.05693985 7.06400028]
 [7.06400028 7.05692568 7.04985815 ... 7.04279774 7.04985815 7.05692568]
 [7.05693985 7.04985815 7.04278354 ... 7.03571603 7.04278354 7.04985815]
 ...
 [7.04988652 7.04279774 7.03571603 ... 7.0286414  7.03571603 7.04279774]
 [7.05693985 7.04985815 7.04278354 ... 7.03571603 7.04278354 7.04985815]
 [7.06400028 7.05692568 7.04985815 ... 7.04279774 7.04985815 7.05692568]]
In [9]:
import matplotlib.pyplot as plt
%matplotlib inline
plt.imshow(z, cmap=plt.cm.gray)
plt.colorbar()
plt.title(" $\sqrt{x^2 + y^2}$")
Out[9]:
Text(0.5, 1.0, ' $\\sqrt{x^2 + y^2}$')
 
 

将条件逻辑表述为数组运算

In [14]:
x = np.array([1, 2, 3, 4, 5])
y = np.array([6, 7, 8, 9, 10])
con = np.array([True, False, True, False, True])
res = [(x if c else y)  for (x, y, c) in zip(x, y, con)]
print(res)
 
[1, 7, 3, 9, 5]
In [15]:
# 使用 where 
res = np.where(con, x, y)
print(res)
 
[1 7 3 9 5]
In [17]:
# 使用 where 做数据处理,将 数组中所有大于 0 的值替换为 1, 小于 0 的值替换为 -1
arr = np.random.randn(4, 3)
print(arr)
res = np.where(arr > 0, 1, -1)
print(res)
 
[[ 1.85005369  0.11056899  0.54077492]
 [ 1.34403865  1.09813584 -0.52853227]
 [-0.94096731  0.6016731   0.45441707]
 [-0.71629691 -0.00940032  0.77079793]]
[[ 1  1  1]
 [ 1  1 -1]
 [-1  1  1]
 [-1 -1  1]]
 

基本数学统计值

image.png

 

image.png

In [20]:
arr = np.arange(20).reshape(4, 5)
print(arr)
# sum 求和
print(arr.sum())
print(np.sum(arr))
# mean 平均值
print(arr.mean())
# std 标准差
print(arr.std())
 
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]
190
190
9.5
5.766281297335398
In [22]:
# 按列求
print(arr.sum(axis=0))
print(arr.mean(axis=0))
print(arr.std(axis=0))
# 按行求
print(arr.sum(axis=1))
print(arr.mean(axis=1))
print(arr.std(axis=1))
 
[30 34 38 42 46]
[ 7.5  8.5  9.5 10.5 11.5]
[5.59016994 5.59016994 5.59016994 5.59016994 5.59016994]
[10 35 60 85]
[ 2.  7. 12. 17.]
[1.41421356 1.41421356 1.41421356 1.41421356]
In [29]:
x = np.array([1, 2, 3, 4, 5])
print(x.cumsum())    # 累积和
print(x.cumprod())    # 累积积
 
[ 1  3  6 10 15]
[  1   2   6  24 120]
In [32]:
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr.cumsum(axis=0))
print(arr.cumprod(axis=0))
 
[[ 1  2  3]
 [ 5  7  9]
 [12 15 18]]
[[  1   2   3]
 [  4  10  18]
 [ 28  80 162]]
 

Bool类型的数组在计算统计值时会被转换成 0(False) 和 1 (True), 可以使用 sum 统计数量

In [35]:
arr = np.array([True, False, True, False, True, True])
print((arr == 0).sum())
print((arr == 1).sum())
 
2
4
 

any() 表示 bool 数组中是否存在 True, all() 表示 bool 数组中是否都为 True

In [36]:
print(arr.any())
print(arr.all())
 
True
False
 

Numpy 排序

image.png

 

numpy.sort(a, axis, kind, order)

image.png

 

集合函数

image.png

In [40]:
arr = np.array([[2, 3, 1, 4], [7, 3, 6, 2], [1, 6, 2, 8]])
arr.sort()  
print(arr)

arr = np.array([[2, 3, 1, 4], [7, 3, 6, 2], [1, 6, 2, 8]])
arr.sort(axis=0, kind='mergesort')
print(arr)
 
[[1 2 3 4]
 [2 3 6 7]
 [1 2 6 8]]
[[1 3 1 2]
 [2 3 2 4]
 [7 6 6 8]]
In [45]:
# argsort 输出元素在指定轴上的大小顺序
arr = np.array([[2, 3, 1, 4], [7, 3, 6, 2], [1, 6, 2, 8]])
res = arr.argsort()
print(arr)
print("*****************")
print(res)
 
[[2 3 1 4]
 [7 3 6 2]
 [1 6 2 8]]
*****************
[[2 0 1 3]
 [3 1 2 0]
 [0 2 1 3]]
In [47]:
# unique 去重
arr = np.array(['a', 'b', 'c', 'a', 'b', 'a'])
print(np.unique(arr))
 
['a' 'b' 'c']
In [48]:
# in1d 查找
print(np.in1d(arr, ['a', 'c', 'e']))
 
[ True False  True  True False  True]
In [49]:
# load、save支持对文件的读写
 

矩阵运算

image.png

 

随机数生成

image.png

 

image.png

In [ ]:
 
posted @ 2020-04-10 11:04  早起的虫儿去吃鸟  阅读(173)  评论(0编辑  收藏  举报