# -*- coding: utf-8 -*-
#=================================================================
#numpy 一个在python中做科学计算的基础库,重在数值计算、也是大部分python科学计算库的基础库,多用于大型,多维数组上的科学运算
#=================================================================
import numpy as np
# 多维数组(ndarray)有一些重要属性,如它的维度、它的数据类型、它的大小、它的索引
# 它的值,如果是二维以上还有轴等信息,这些信息如何获取?
# ndarray 是个同构数据组,即其中所有元素的类型都是相同的,除了数据类型外,当然
# 还有反应各维大小的 shape,shape 用元组形式表示各维大小。
# 查看数组的数据类型及 shape。
#示例1:
# list01=np.arange(0,10,1)
# print('查看维度:',list01.ndim)
# print('list01:',list01)
# list02=list01.reshape(2,5)
# print('list02:',list02)
# ##改变其 shape
# print('查看形状:',list02.shape)
# print('查看大小:',list02.size)
# print('查看数据类型:',list02.dtype)
#示例2:
# data2 = [[1,1,1],[2,2,2],[3,3,3]]
# arr2 = np.array(data2)
# print('Arr2:',arr2)
# print(arr2.ndim)
# print(arr2.shape)
# print(arr2.dtype)
#示例3:初始化数组
# np.zeros(10)
# data3=np.zeros(10)
# print('data3:',data3)
# arr3=np.array(data3)
# print('arr3:',arr3)
# print('np.ones:\n',np.ones((2,3)))
#
# #数组的元素值未初始化,因此它们的值是不确定的,可能是之前存储在相应内存位置的值.如果你需要确保数组的初始值为 0 或具有其他特定值,请使用 zeros 或 ones 函数。
# print('np.empty:\n',np.empty((4,3,2)))
# print('np.arange:\n',np.arange(1,10))
# print('np.arange:\n',np.arange(1,100,3))
#示例4:运算
# arr=np.arange(1.,7.).reshape(2,3)
# print('arr:\n',arr)
# print('arr + arr:\n',arr + arr)
# print('arr / arr:\n',arr / arr )
# print('1/arr:\n',1/arr)
# print('arr ** 0.5:\n',arr ** 0.5)
# #一定要36
# arr1=np.arange(1.,36.).reshape(5,7)
# print('arr1:\n',arr1)
#示例5:成员,可以切片获取和赋值
# arr = np.arange(10)
# print('arr0:',arr)
# print('arr1:',arr[5])
# print('arr2:',arr[5:8])
#
# arr[:-3] = 0
# print('arr3:',arr)
# arr[5:8]=0
# print('arr4:',arr)
#示例6:成员--支持拷贝
# arr = np.arange(10)
# print(arr)
# arr1=arr[5:8].copy()
# print(arr1)
#示例7:查询
# names = np.array(['a','b','c','d','e'])
# data = np.arange(1,16).reshape(5,3)
# print('names:\n',names)
# print('data:\n',data)
#
# print("data[names == 'b']:\n",data[names == 'b'])
# print("data[names == 'b',2]:\n",data[names == 'b',2])
# print("data[names != 'b']:\n",data[names != 'b'])
# print("data[names != 'b',2]:\n",data[names != 'b',2])
#
# print('data:\n',data)
# print("names != 'b':\n'",names != 'b')
# print("names != 'c':\n'",names != 'c')
# print("data[(names != 'b') & (names != 'c')]:\n",data[(names != 'b') & (names != 'c')])
# print("data[(names != 'b') | (names != 'c')]:\n",data[(names != 'b') | (names != 'c')])
#示例8:矩阵乘法
# arr = np.arange(12).reshape((3,4))
# print('arr:\n',arr)
# print('arr.T:\n',arr.T)
# #这里NumPy库提供了用于矩阵乘法的dot函数
# print("np.dot(arr.T,arr):\n",np.dot(arr.T,arr))
#示例9:最大值maximum
# arr = np.arange(10)
# print('arr:\n',arr)
# #np.sqrt对数组每个元素返回一个非负平方根
# print('np.sqrt(arr):\n',np.sqrt(arr))
# #e的x幂次方,e = 2.718281828459,e是一个无限不循环小数
# print('np.exp(arr):\n',np.exp(arr))
# #
# x=np.array([1,2,3,4,5])
# y=np.array([5,4,3,2,1])
# print('x:\n',x)
# print('y:\n',y)
# print('np.maximum(x,y):\n',np.maximum(x,y))
#示例10:where, True和false取上下
# xarr = np.array([1.1,1.2,1.3,1.4,1.5])
# yarr = np.array([2.1,2.2,2.3,2.4,2.5])
# cond = np.array([True,False,True,True,False])
# result = np.where(cond,xarr,yarr)
# print(result)
#示例11:唯一化以及其他的集合逻辑
# 数组的集合运算
# 方法
# x = np.array([1,2,3])
# y = np.array([3,4,5])
# # 计算x中的唯一元素,并返回有序结果
# print('np.unique(x):\n',np.unique(x))
# # 计算x和y中的公共元素,并返回有序结果
# print('intersect1d(x, y):\n',np.intersect1d(x, y))
# # 计算x和y的并集,并返回有序结果
# print('union1d(x, y):\n',np.union1d(x, y))
# # 得到一个表示“x的元素是否包含于y”的布尔型数组
# print('in1d(x, y):\n',np.in1d(x, y))
# # 集合的差,即元素在x中且不在y中
# print('setdiff1d(x, y):\n',np.setdiff1d(x, y))
# # 集合的对称差,即存在于一个数组中但不同时存在于两个数组中的元素
# print('setxor1d(x, y):\n',np.setxor1d(x, y))
#示例12:随机数生成
# np.random.randn(3):输出一行3列的一维数组,数值随机
#演示一下:[0.51030667 0.64763246 0.980867 ]
print('np.random.randn(3):\n',np.random.randn(3))