利用Python进行数据分析(1)—— Numpy Basic(1)

来源:互联网 发布:linux查看指定进程 编辑:程序博客网 时间:2024/05/21 17:48

Jupyter Notebook Viewer

The NumPy ndarray: a multidimensional array object

import numpy as np'''precision 浮点数输出精度位数(默认值8位)suppress 是否 禁止 使用 科学记数法(默认为False)打印小浮点值'''np.set_printoptions(precision=4, suppress=True)'''numpy.random.randn(d0, d1, …, dn)是从标准正态分布中返回一个或多个样本值。numpy.random.rand(d0, d1, …, dn)的随机样本位于[0, 1)中。'''data_1 = np.random.randn(2, 3)print(data_1)# data_2 = np.random.rand(2, 3)## print(data_2)print(data_1*10)print(data_1+data_1)# 数组 形状print('数组 形状:', data_1.shape)# 数组 中 数据 的 类型print('数组 中 数据 的 类型:', data_1.dtype)# 数组 的 维度print('数组 的 维度:', data_1.ndim)# --------------------------------------
[[ 1.0104 -0.4554 -0.2024] [ 0.5217  1.1163  1.4374]][[ 10.1039  -4.554   -2.0242] [  5.2174  11.1635  14.3736]][[ 2.0208 -0.9108 -0.4048] [ 1.0435  2.2327  2.8747]]数组 形状: (2, 3)数组 中 数据 的 类型: float64数组 的 维度: 2Process finished with exit code 0

Creating ndarrays

# 将 data1 转换为 1*4 的数组data1 = [6, 7.5, 8, 0, 1]arr1 = np.array(data1)print(arr1)# 将 data2 转换为 2*4 的数组data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]arr2 = np.array(data2)print(arr2)# np.array 函数可以自动推断出 dtype,也可以指定 dtypeprint(arr1.dtype, arr2.dtype)# 10*1 的 0矩阵(10行 1列)print(np.zeros((10, 1)))# 1*10 的 0矩阵(1行 10列)print(np.zeros((1, 10)))# 3*6 的单位矩阵print(np.ones((3, 6)))# 创建一个与 arr2 形状相同的 单位矩阵print(np.ones_like(arr2))# 很多情况下, np.empty 返回的是 垃圾值print(np.empty((2, 3, 2)))# 功能类似 Python 内置的 range,但 返回的不是 list 是 ndarrayprint(np.arange(15))
[ 6.   7.5  8.   0.   1. ][[1 2 3 4] [5 6 7 8]]float64 int32[[ 0.] [ 0.] [ 0.] [ 0.] [ 0.] [ 0.] [ 0.] [ 0.] [ 0.] [ 0.]][[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]][[ 1.  1.  1.  1.  1.  1.] [ 1.  1.  1.  1.  1.  1.] [ 1.  1.  1.  1.  1.  1.]][[1 1 1 1] [1 1 1 1]][[[  2.3061e-295   7.3666e+228]  [  7.5489e+252   2.9548e+137]  [  1.4280e+248   2.6469e+180]] [[  1.0994e+248   6.9948e+228]  [  7.5489e+252   7.6711e+170]  [  2.6469e+180   5.6323e-322]]][ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]Process finished with exit code 0

Data Types for ndarrays

# 创建 数组 时,指定 数组中 数据 的 类型arr1 = np.array([1, 2, 3], dtype=np.float64)arr2 = np.array([1, 2, 3], dtype=np.int32)print(arr1.dtype)print(arr2.dtype)# 当创建 数组 时,未指定 数据 的类型,则由 numpy 自己推断arr = np.array([1, 2, 3, 4, 5])print(arr.dtype)# 通过 ndarray.astype(np.dytype) 可以修改 数组 的 数据类型float_arr = arr.astype(np.float64)print(float_arr.dtype)# 修改 数组 数据类型arr = np.array([3.7, -1.2, -2.6, 0.5, 12.9, 10.1])print(arr)print(arr.astype(np.int32))# 将 数据类型 从 np.string_ 转换为 np.float64numeric_strings = np.array(['1.25', '-9.6', '42'], dtype=np.string_)print(numeric_strings.astype(float))# 数据类型int_array = np.arange(10)print(int_array.dtype)calibers = np.array([.22, .270, .357, .380, .44, .50], dtype=np.float64)print(int_array.astype(calibers.dtype).dtype)print(int_array.dtype)# 简写形式empty_uint32 = np.empty(8, dtype='u4')print(empty_uint32.dtype)# 注意:ndarray.astype ,无论如何都会创建出一个新的数组# ------------------------------------------------
float64int32int32float64[  3.7  -1.2  -2.6   0.5  12.9  10.1][ 3 -1 -2  0 12 10][  1.25  -9.6   42.  ]int32float64int32uint32Process finished with exit code 0

Operations between arrays and scalars

'''大小相等 的 数组 之间的 任何 【算术运算】 都会将 运算 应用到 【元素级别】数组 与 标量 之间的 【算术运算】 也会将 标量值 传播到 【各个元素】'''arr = np.array([[1., 2., 3.], [4., 5., 6.]])print(arr)print(arr * arr)print(arr - arr)print(1 / arr)print(arr ** 0.5)# 矩阵 点乘  2*3 · 3*2 = 2*2print(np.dot(arr, arr.T))
[[ 1.  2.  3.] [ 4.  5.  6.]][[  1.   4.   9.] [ 16.  25.  36.]][[ 0.  0.  0.] [ 0.  0.  0.]][[ 1.      0.5     0.3333] [ 0.25    0.2     0.1667]][[ 1.      1.4142  1.7321] [ 2.      2.2361  2.4495]][[ 14.  32.] [ 32.  77.]]Process finished with exit code 0

Basic indexing and slicing

arr = np.arange(10)print(arr)print(arr[5])print(arr[5:8])# 将 arr 数组 索引 从 5 到 7 的元素替换为 12arr[5:8] = 12# 数组切片是原始数组的视图,数据【不会被复制】,视图上的任何修改都会【直接反映】 到 【原始数组】print(arr)arr_slice = arr[5:8]# arr 数组中,索引为 6 的元素被替换为 12345arr_slice[1] = 12345print(arr)# arr 数组中,索引为 5,6,7 的元素被替换为 64arr_slice[:] = 64print(arr)# 如果想要得到的是 ndarray 切片的一份副本而非视图的话,就需要显示的复制操作copy_slice = arr[5:8].copy()print(copy_slice)copy_slice[:] = 6print(copy_slice)# 此时 arr 数组 未被修改print(arr)
[0 1 2 3 4 5 6 7 8 9]5[5 6 7][ 0  1  2  3  4 12 12 12  8  9][    0     1     2     3     4    12 12345    12     8     9][ 0  1  2  3  4 64 64 64  8  9][64 64 64][6 6 6][ 0  1  2  3  4 64 64 64  8  9]Process finished with exit code 0
# 在二维数组中,各索引位置上的元素不再是标量,而是一维数组arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])pprint(arr2d)# arr2d 数组 的 索引为 2 的 行print(arr2d[2])# arr2d 数组 的 一行 和 二行print(arr2d[:2])# arr2d 数组 第 0 行,第 2 列 的元素print(arr2d[0][2])print(arr2d[0, 2])arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])pprint(arr3d)print(arr3d[0])# 4print(arr3d[0][1][0])old_values = arr3d[0].copy()arr3d[0] = 42pprint(arr3d)arr3d[0] = old_valuespprint(arr3d)print(arr3d[1, 0])# ----------------------------------------------------------
array([[1, 2, 3],       [4, 5, 6],       [7, 8, 9]])[7 8 9][[1 2 3] [4 5 6]]33array([[[ 1,  2,  3],        [ 4,  5,  6]],       [[ 7,  8,  9],        [10, 11, 12]]])[[1 2 3] [4 5 6]]4array([[[42, 42, 42],        [42, 42, 42]],       [[ 7,  8,  9],        [10, 11, 12]]])array([[[ 1,  2,  3],        [ 4,  5,  6]],       [[ 7,  8,  9],        [10, 11, 12]]])[7 8 9]Process finished with exit code 0

Indexing with slices

arr = np.array([[1., 2., 3.], [4., 5., 6.]])arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])pprint(arr2d)print(arr[1:6])print(arr2d[:2])# 0,1 行 和 1,2 列 取交集print(arr2d[:2, 1:])# 1 行 的 0,1print(arr2d[1, :2])print(arr2d[2, :1])# 第 0print(arr2d[:, :1])# 修改 数值arr2d[:2, 1:] = 0print(arr2d)# --------------------------------
array([[1, 2, 3],       [4, 5, 6],       [7, 8, 9]])[[ 4.  5.  6.]][[1 2 3] [4 5 6]][[2 3] [5 6]][4 5][7][[1] [4] [7]][[1 0 0] [4 0 0] [7 8 9]]Process finished with exit code 0

原创粉丝点击