import numpy as np #创建ndarray # data1 = [6, 5, 7, 1, 3] # arrl = np.array(data1) # print(arrl) #多维列表创建ndarray data2 = [[3, 4, 2], [1, 8, 9]] arr2 = np.array(data2) # # print(arr2) # # asrr1 = np.asarray([2, 3, 4]) # print(asrr1) # # asrr2 = np.asarray([[2, 1, 3, 4], [2, 9, 9, 1]]) # # print(asrr2) #np.array() 和 np.asarray() #array()创建时是对原始对象的一份copy创建的,而asarray当输入时ndarray并不进行复制操作, # 如果改变新创建的数组,则原始数组也会跟着改变。 # arr0 = np.zeros((2, 3)) # arr11 = np.array(arr0) # arr11[0][0] = 100 # print(arr11) # print(arr0) # # arr12 = np.asarray(arr0) # arr12[0][0] = 200 # print(arr12) # print(arr0) #创建全0元素的ndarray # zeros1 = np.zeros(4) # zeros2 = np.zeros((3, 4)) # # ones1 = np.ones(4) # ones2 = np.ones((3, 4)) # # print(zeros1) # print(zeros2) # # print(ones1) # print(ones2) #empty函数 用来创建一个没有任何值得数组 # empty1 = np.empty((3, 4)) # print(empty1) # # #创建对角矩阵 # eye1 = np.eye(4) # # print(eye1) # array将输入数据(列表、元组、数组或其他序列类型)转换为ndarray # asarray同array如果当输入是ndarray则不进行复制 # arange类型python中的range,但返回的是一个ndarray,并不是列表 # ones,ones_like 前者返回是1的数组,后者以另一数组为参数,根据其形状和dtype返回全为1的数组 # zeros, zeros_like 同上,创建新数组 # eye, identity 创建一个正方的N*N的矩阵,对角为1,其余为0 # print(arr2.shape) # # print(arr2.dtype) # # int_arr = arr2.astype(np.int64) # print(int_arr.dtype) # print(arr2 + 3) # print(arr2 * 1.2) arr3 = np.array([[2, 1, 4],[1, 5, 9]]) # print(arr3) # # print(arr2 * arr3) # print(arr3 + arr2) # # print(np.add(arr2, arr3)) #数据索引 # print(arr2[0]) # print(arr2[0][1]) # print(arr2[0,1]) #切片 a = [1, 2, 3, 4, 5] # print(a[2:4]) # # print(arr2) # # print(arr2[0][1:3]) # # print(arr2[0:1, :]) # print(arr2[0:1][:]) # split1 = arr3[:2, :2] # split1[0][0] = 6 # # print(split1) # #布尔型索引 # words = np.array(list('abacbad')) # print(words) data = np.random.randn(7, 4) # # print(words == 'a') # #布尔数组的长度必须跟索引轴的长度一致,此外还可以将布尔型索引和切片混合使用 # print(data[words == 'a']) # # print(data[data > 0]) # # print(data[(data > 0) & (data < 1)]) # # data[(data > 0) & (data < 1)] = 3 # # print(data) arr = np.empty((8, 4)) for i in range(8): arr[i] = i # print(arr) # # print(arr[[3, 5, 1, 6]]) arr = np.arange(32).reshape([8, 4]) # print(arr) # print(arr[[1, 5, 7, 2], [0, 3, 1, 2]]) # # print(arr[[1, 5, 7, 2]][:, [0, 2, 1, 3]]) # 花式索引和数组切片不一样,花式索引是将数据复制到新的数组中,而切片只是原始数据的一份视图,改变切片数据会改变原始数据, # 而改变花式索引产生的数组并不会改变原始数据, a = arr[np.ix_([1, 5, 7, 2], [0, 2, 1, 3])] print(a) a[0][0] = 10000 # print(a) # # print(arr[np.ix_([1, 5, 7, 2],[0, 2, 1, 3])]) #通用函数 #对数组进行元素级的运算的函数 # np.exp(data) 指数函数运算 # np.abs(data) 取绝对值 # np.square(data) 取平方 # np.sqrt(np.square(data)) 开根号