Python学习之路:NumPy进阶

import numpy as np;
#创建数组的四种办法
##可以传入任何类数组
a = np.array([0,1,2,3,4]);
b = np.array((0,1,2,3,4));
c = np.arange(5);
d = np.linspace(0,2*np.pi,5);
print(a);
print(b);
print(c);
print(d);
[0 1 2 3 4]
[0 1 2 3 4]
[0 1 2 3 4]
[0.         1.57079633 3.14159265 4.71238898 6.28318531]
#创建二维数组
a = np.array([[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(a);
[[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(a[0,1:4]);
print(a[1:4,0]);
print(a[:,1]);
##骚操作 用法:起始索引:结束索引:步长(不包括结束索引)
print(a[1:4:1,0:5:2]);
[12 13 14]
[16 21 26]
[12 17 22 27 32]
[[16 18 20]
 [21 23 25]
 [26 28 30]]
#多维数组的属性
print(a);
print(type(a));
print(a.dtype);
print(a.size);
print(a.shape);
print('-------------')
print(a.itemsize);#每个元素所占的字节数
print(a.ndim);#数组的维数
print(a.nbytes);#数组中的所有数据消耗掉的字节数。你应该注意到,这并不计算数组的开销,因此数组占用的实际空间将稍微大一点
[[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]]
<class 'numpy.ndarray'>
int32
25
(5, 5)
-------------
4
2
100
#多维数组的运算
a = np.arange(25)
a = a.reshape((5, 5))

b = np.array([10, 62, 1, 14, 2, 56, 79, 2, 1, 45,
              4, 92, 5, 55, 63, 43, 35, 6, 53, 24,
              56, 3, 56, 44, 78])
b = b.reshape((5,5))
#两个数组做比较是是数组中每个元素依次比较,要求两个矩阵维度一致
print(a < b)
print(a > b)
print('----------------------------------');
print(a[a<b]);
print('----------------------------------');
print(a.dot(b));


[[ True  True False  True False]
 [ True  True False False  True]
 [False  True False  True  True]
 [ True  True False  True  True]
 [ True False  True  True  True]]
[[False False  True False  True]
 [False False  True  True False]
 [ True False  True False False]
 [False False  True False False]
 [False  True False False False]]
----------------------------------
[ 0  1  3  5  6  9 11 13 14 15 16 18 19 20 22 23 24]
----------------------------------
[[ 417  380  254  446  555]
 [1262 1735  604 1281 1615]
 [2107 3090  954 2116 2675]
 [2952 4445 1304 2951 3735]
 [3797 5800 1654 3786 4795]]
#另外一些常见的函数
a = np.arange(10);
print(a);
print(a.sum());
print(a.min());
print(a.max());
#累加函数
print(a.cumsum());

[0 1 2 3 4 5 6 7 8 9]
45
0
9
[ 0  1  3  6 10 15 21 28 36 45]
#花式索引
##检索特定的元素,类似多重赋值
a = np.arange(0,100,10);
indices = [1,5,-1];
b = a[indices];
print(a);
print(b);
print('-------------------------');
a = np.ones((5,5));
a[0,0] = 5;
a[2,0] = 2;
print(a);
indices = [0,2,3];
b = a[indices];
print(b);
[ 0 10 20 30 40 50 60 70 80 90]
[10 50 90]
-------------------------
[[5. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [2. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]]
[[5. 1. 1. 1. 1.]
 [2. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]]
#布尔屏蔽
import matplotlib.pyplot as plt;
a = np.linspace(0, 2 * np.pi, 50);
b = np.sin(a);
plt.plot(a,b);
mask = b >= 0;
plt.plot(a[mask], b[mask], 'bo');
mask = (b >= 0) & (a <= np.pi / 2);
plt.plot(a[mask], b[mask], 'go');
plt.show();

#缺省索引
# Incomplete Indexing
a = np.arange(0, 100, 10)
b = a[:5] # [0:5]
print(a>=50);
c = a[a >= 50]
print(b) # >>>[ 0 10 20 30 40]
print(c) # >>>[50 60 70 80 90]
[False False False False False  True  True  True  True  True]
[ 0 10 20 30 40]
[50 60 70 80 90]
#Where 函数
a = np.arange(0,100,10);
print(a[a>=50]);
print(np.where(a < 50));
print(np.where(a < 50)[0]);
[50 60 70 80 90]
(array([0, 1, 2, 3, 4], dtype=int64),)
[0 1 2 3 4]

原文地址:https://www.cnblogs.com/doubest/p/10599616.html