随着机器学习等相关学科的兴起,python的使用量和关注程度日益上升,而numpy作为机器学习中必不可少的一个库,特地整理并记录如下。中间省略了一些我认为十分基础的部分,同时也增加了一些我认为十分有意思值得关注或者有益于理解numpy逻辑的部分。
import numpy as np
data = np.array([[0.95, -0.24, -0.88], [0.56, 0.23, 0.91]])
data * 10
data
data
data * 10
data.shape # shape为属性 表示各维度大小的元组
data.dtype # dtype说明数组数据类型的对象
data1 = [6, 7, 8, 6.5, 0, 1]
arr1 = np.array(data1)
arr1
data2 = [[1, 2, 3], [4, 5, 6]]
arr2 = np.array(data2)
arr2
np.zeros(10)
np.zeros((2, 3))
np.empty((2, 2, 3))
np.arange(10)
arr1 = np.array([1, 2], dtype=np.float64)
arr2 = np.array([1, 2], dtype=np.int32)
print(arr1.dtype)
print(arr2.dtype)
arr = np.array([1.2, 1.3, 1, 3, 4])
arr.dtype
int_arr = arr.astype(np.int32)
int_arr.dtype
numeric_strings = np.array(['1.2', '1.5'], dtype=np.string_)
numeric_strings.dtype
numeric_strings.astype(np.float64)
second
print('hi')
arr = np.arange(10)
arr + arr
arr ** 0.5 # ** 表示指数
arr
arr
arr[5:8]
arr[5:8] = 12
arr
arr_slice = arr[5:8]
arr_slice[1] = 12345
arr
arr_slice[:] = 64
arr
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr2d[2]
arr2d[0][2]
arr2d[0, 2]
arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
arr3d
arr3d[0]
arr[1:6]
arr2d[:2, 1:]
arr2d[1, :2]
arr2d[1]
arr2d
arr2d[:, :1]
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
data = np.random.randn(7, 4) # 书中只使用了 randn 有误
names
data
data[:2, 2:]
names == 'Bob'
data[names == 'Bob']
- 可以用来对布尔值进行取反
在Python中 与 和 或 只用一个符号来表示
mask = (names == 'Bob') | (names == 'Will')
mask
data[mask]
data[data < 0] = 0
data
data[names != 'Joe'] = 7
data
arr = np.empty((8, 4))
for i in range(arr.shape[0]):
arr[i] = i
arr
# 在选取特定顺序行子集时,可以传入一个用于指定顺序的整数列表或ndarray
arr[[4, 3, 0, 6]]
arr[[-1, -5, -7]]
arr = np.arange(32).reshape((8, 4))
arr # arange 和 reshape 搭配使用可以快速构造一些简单数组
arr[[1, 5, 7, 3], [0, 3, 1, 2]]
arr[[1, 5, 7, 3]][:, [0, 3, 1, 2]]
np.ix_
可以将连个一维整数数组转换为选取方形区域的索引器arr[np.ix_([1, 5, 7, 2], [0, 3, 1, 2])]
arr = np.arange(15).reshape((3, 5))
arr
arr.T
arr = np.random.randn(6, 3)
np.dot(arr.T, arr)
arr = np.arange(16).reshape((2, 2, 4))
arr
arr.transpose((1, 0, 2))
arr = np.arange(10)
np.sqrt(arr)
np.exp(arr)
x = np.random.randn(8)
y = np.random.randn(8)
x
y
np.maximum(x, y)
arr = np.random.randn(8) * 5
np.modf(arr)
arr
points = np.arange(-5, 5, 0.01)
xs, ys = np.meshgrid(points, points)
ys
ys.shape
import matplotlib.pyplot as plt
z = np.sqrt(xs ** 2 + ys ** 2)
z
plt.imshow(z, cmap=plt.cm.gray)
plt.title('Image plot of $\sqrt{x^2 + y^2}$ for a grid of values')
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 = [(x if c else y) for x, y, c in zip(xarr, yarr, cond)]
result
# 使用np.where来实现
result = np.where(cond, xarr, yarr)
result
arr = np.random.randn(4, 4)
arr
np.where(arr > 0, 2, -2)
np.where(arr > 0, 2, arr)
arr = np.random.randn(5, 4)
arr.mean()
np.mean(arr)
arr.mean(1)
arr = np.arange(9).reshape((3, 3))
arr.cumsum(0)
arr.cumsum(1) # cumsum 为依次相加,参数为轴的方向
arr.cumprod(0)
arr = np.random.randn(100)
(arr > 0 ).sum() # 可以用sum函数对布尔值进行计数
45
bools = np.random.randn(5)
bools = np.where(bools > 0 , True,False)
bools
array([False, False, True, False, False], dtype=bool)
bools.any()
True
bools.all() # any 和 all 用来检测数组中真值的数量,存在,全部都是
False
arr = np.random.randn(9)
arr
array([ 0.56648394, 0.09646596, 2.52960358, 1.01392528, 1.01635798,
0.50707351, 0.6003978 , 0.40438106, -0.40787323])
arr.sort()
arr
array([-0.40787323, 0.09646596, 0.40438106, 0.50707351, 0.56648394,
0.6003978 , 1.01392528, 1.01635798, 2.52960358])
arr = np.random.randn(5,3)
arr.sort(1)
arr # sort函数可以用来对数组进行排序
array([[-0.09580399, 0.29251832, 1.03958502],
[-0.56989704, -0.53186181, 0.5750816 ],
[-0.8406608 , 0.68156895, 2.12098301],
[-0.35232795, 0.44457186, 1.13045437],
[-0.74018734, -0.31642068, 1.46136771]])
large_arr = np.random.randn(1000)
large_arr.sort()
large_arr[int(0.05 * len(large_arr))] # 计算 5% 分位数
-1.5427390296814982
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
np.unique(names)
array(['Bob', 'Joe', 'Will'],
dtype='<U4')
x = np.arange(6).reshape((2,3))
x
array([[0, 1, 2],
[3, 4, 5]])
y = np.arange(6).reshape((3,2))
x.dot(y)
array([[10, 13],
[28, 40]])
y.dot(x)
array([[ 3, 4, 5],
[ 9, 14, 19],
[15, 24, 33]])
from numpy.linalg import inv,qr
X = np.random.randn(5,5)
mat = X.T.dot(X)
mat
array([[ 6.6222079 , 2.37024094, 3.04849725, -6.13510153, -2.06561393],
[ 2.37024094, 8.98202163, 4.6212979 , -3.02490862, 4.15413675],
[ 3.04849725, 4.6212979 , 5.14422425, -1.59640215, 2.76677395],
[-6.13510153, -3.02490862, -1.59640215, 8.14871046, 4.16424202],
[-2.06561393, 4.15413675, 2.76677395, 4.16424202, 6.8966607 ]])
inv(mat)
array([[ 6.92376649, 7.23887753, -2.51673305, 11.65615503,
-8.31493388],
[ 7.23887753, 8.55271051, -2.51461368, 13.22100216,
-9.95764339],
[ -2.51673305, -2.51461368, 1.39594234, -3.84337402,
2.52150043],
[ 11.65615503, 13.22100216, -3.84337402, 21.04459734, -15.6373916 ],
[ -8.31493388, -9.95764339, 2.52150043, -15.6373916 , 12.0828665 ]])
I = mat.dot(inv(mat))
np.where(np.fabs(I) < 0.01,0,I)
array([[ 1., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 0.],
[ 0., 0., 1., 0., 0.],
[ 0., 0., 0., 1., 0.],
[ 0., 0., 0., 0., 1.]])
q,r = qr(mat)
q
array([[-0.66000935, 0.16706919, -0.25898634, -0.58912734, -0.34975791],
[-0.23623257, -0.76590412, 0.41085523, 0.11550852, -0.41885655],
[-0.3038317 , -0.28146184, -0.73802815, 0.52204446, 0.10606395],
[ 0.61146138, -0.07062138, -0.41330024, -0.13285758, -0.65776848],
[ 0.2058716 , -0.54888124, -0.22050263, -0.59110507, 0.50825156]])
r
array([[-10.03350621, -6.08472005, -5.07325425, 11.08876476,
3.50744819],
[ 0. , -9.85059669, -5.88395418, -1.12001765,
-8.38504438],
[ 0. , 0. , -2.63770457, -2.76179267,
-3.04205653],
[ 0. , 0. , 0. , -1.11256208,
-1.48877537],
[ 0. , 0. , 0. , 0. ,
0.04206382]])
1. 问题 之前我们讨论的PCA、ICA也好,对样本数据来言,可以是没有类别标签y的。回想我们做回归时,如果特征太多,那么会产生不相关特征引入、过度拟合等问题。我们可以使用PCA来降维,但PCA没有将类别标签考虑进去,属于无监督的。 比如回到上次提出的文档中含有“learn”和“study”的问题,使用PCA后,也许可以将这两个特征合并为一个,降了维度。但假设我们的_常数项会影响线性判别分析的权重吗
CentOS6下安装DB2V9.7,创建实例时总是报错,可能版本不兼容,换成CentOS 7就可以安装成功了。。_centos6 db2 9.7
包含金额/日期输入框,带弹出数字面板的计算输入框,安全密码输入等控件(文章及相关代码搜集自网络,仅供参考学习,版权属于原作者! ).1.CalculatorBox CalculatorBox.rar2.带行号+自定义颜色显示的TextBox3.金额输入框 currency_textbox.zip CurrencyBox.rar NumberPicker_src.z...
1、网上下载kafka_2.11-0.10.0.1.tgz包,下载过程略2、下载完毕之后上传至服务器指定目录3、解压[root@localhost soft]# [root@localhost soft]# tar xvfz kafka_2.11-0.10.0.1.tgz[root@localhost soft]# cd kafka_2.11-0.10.0.14、配置环境变量vi ..._kafka_2.11-0.10.0.1
首先,最大公约数的概念,相信大家都了解,我这里就不多说了。直接看代码。实在不知道,看百度百科解释:https://baike.baidu.com/item/最大公约数1.简单穷举法 /** * @描述 简单穷举法, 从2开始到较小的数, 速度最慢 * @param num1 * @param num2 * @return 最大公约数 ...
转自:VUE Error: listen EADDRNOTAVAIL: address not availablevue项目运行npm run dev时出现 Error: listen EADDRNOTAVAIL: address not available ... 的错误原因:配置的IP不对解决方法:打开config文件夹,找到index.js文件,将host的值修改为loc...
import xlwtdef writeXls(): wb = xlwt.Workbook(encoding='ascii') ws = wb.add_sheet('ip列表') ws.write(0, 0, 'IP地址') ws.write(0, 1, '服务器地址') ws.write(0, 2, '是否匿名') ws.write(0, 3..._xlwt续写xls
CLLocationManager类可以实时的获得我们位置的经纬度,并且可以通过经纬度在MapView上定位://创建CLLocationManager对象CLLocationManager*locationManager=[[CLLocationManageralloc]init];//设置委托对象为自己[locationManagersetDelegate:self];//要求CLLoca...
java中equals和==【各种包括面试题】1.对于java中==java中的数据类型,可分为两类:1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值。 基本数据类型比较(string 除外), == 是比较值;2.复合(引用)数据类型(类)..._java中==和equals面试题
问题描述 输入一个正整数n,输出n!的值。 其中n!=123*…*n。算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。 将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。 首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。输入格式 输入包含一个正整数n,n<=1000。输出格式 输出n!的准确值。样例输入10_求7的阶层pathon
效果图:后台代码:你可以使用sqlhelper,本文没用。代码如下:using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.Web
这两天比较闲,简单实现了一下个人中心页面scrollView嵌套的效果,也就是下边这个页面,大家感受一下先:JSDemo2.gif首先讲下实现思路,很多人看到这个界面觉得是多个scrollView嵌套实现的,其实苹果不推荐scrollView的嵌套,特别是有同方向滚动行为的scrollView嵌套,因为系统也不知道你当前想要哪个scrollView滚