numpy

1.np.random.randn函数

numpy中rand与randn的区别:

(1).rand是随机生成值在0-1之间的函数。

(2).randn是随机生成均值为0,方差为1的正态分布上的数值。

np.random.randn函数不同个数参数的输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
in: x = np.random.randn(3)
print(x)#输出1行3列的一维数组
out:array([0.87154087, 0.78316833, 0.97669061])

in: x = np.random.randn(4,3)
print(x)#输出4行3列的二维数组
out:[[ 0.81536654 -0.06119516 0.23273782]
[-1.3096832 0.11305955 -0.43735283]
[-1.68680386 -0.08597495 -1.20287298]
[-0.30945828 -0.50162275 0.41018841]]

in: x = np.random.randn(4,3,2)
print(x)#输出4个小矩阵,每个小矩阵都是3行2列
out:[[[-0.24571791 -0.51039714]
[ 0.88810165 -0.94045245]
[-0.37231775 1.33880112]]

[[ 0.09029384 -0.76451493]
[ 1.25793366 1.04770133]
[ 0.92711157 1.07891784]]

[[ 1.10773856 -0.0084584 ]
[-0.31300087 -0.80121054]
[ 0.15738774 -1.12602141]]

[[ 0.54273696 1.2454806 ]
[-0.80644804 -1.00282505]
[ 0.70669598 -0.45169629]]]

#其他情况以此类推

2.ndarray的创建

ndarray是一个通用的同构数据多维容器,其中的所有元素必须是相同类型的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
in :data1 = [6, 7.5, 8, 0, 1]
arr1 = np.array(data1)
print(arr1)
out:array([6. , 7.5, 8. , 0. , 1. ])#np.array会尝试为新建的这个数组推断出一个较为合适的数据类型。

in :data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]
arr2 = np.array(data2)
print(arr2)
out:[[1 2 3 4]
[5 6 7 8]]
in :arr1 = np.array([1, 2, 3], dtype=np.float64)#指定创建的array的元素类型
print(arr1)
out:[1. 2. 3.]

in :arr2.ndim #维度大小
out:2

in :arr2.shape #数组大小
out:(2, 4)

in :arr2.dtype #元素类型
out:dtype('int32')

zeros和ones分别可以创建指定长度或形状的全0或全1数组。

empty可以创建一个没有任何具体值的数组,通常它返回的都是一些未初始化的垃圾值。

1
2
in : np.zeros(10)
out: array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])

通过ndarray的astype方法可以明确地将一个数组从一个dtype转换成另一个dtype:

1
2
3
4
in :arr = np.array([1, 2, 3, 4, 5])
float_arr = arr.astype(np.float64)
float_arr.dtype
out:dtype('float64')

3.numpy数组的运算

大小相等的数组之间的任何算术运算及数组与标量的算术运算都会将运算应用到元素级。

1
2
3
4
5
6
7
8
9
10
In :arr = np.array([[1., 2., 3.], [4., 5., 6.]])
arr
Out:
array([[ 1., 2., 3.],
[ 4., 5., 6.]])

In : arr * arr
Out:
array([[ 1., 4., 9.],
[ 16., 25., 36.]])

矩阵的乘法

1
2
3
4
5
6
in: A = np.array([[1,2], [3,4]])
B = np.array([[5,6], [7,8]])
np.dot(A, B)#进行矩阵A与矩阵B的乘法运算
out:
array([[19, 22],
[43, 50]])

4.ndarray的切片

1
2
3
4
5
6
7
8
9
in :arr2d
out:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
in :arr2d[:2, 1:]
out:
array([[2, 3],
[5, 6]])

5.广播

NumPy中,形状不同的数组之间也可以进行运算。

img1

img2

6.np.arange()用法

一个参数时:

(1)参数值为终点
(2)起点取默认值0
(3)步长取默认值1
1
2
3
4
5
in :
import numpy
print(numpy.arange(6)) #从0到5,不包括6
out:
[0 1 2 3 4 5]

两个参数时:

(1)第一个参数为起点
(2)第二个参数为终点(不包括)
(3)步长取默认值1
1
2
in: print(numpy.arange(6, 10)) #[6,9)
out:[6 7 8 9]

三个参数时:

(1)第一个参数为起点
(2)第二个参数为终点(不包括)
(3)第三个参数为步长
1
2
3
in: print(np.arange(6,20,1.5))  #步长支持小数
out:
[ 6. 7.5 9. 10.5 12. 13.5 15. 16.5 18. 19.5]