个人学习机器学习笔记--

1.

X = X[y != 0, :2]

逗号是分割行与列,y != 0在行的位置,表示行不取y = 0 的所有行,而:2在列的位置,说明列取0到2的列(不包括2)

所以就是不取y=0的所有第0列与第1列

2.numpy.random.permutation()

返回一个改变的序列或 矩阵

np.random.permutation(10)
array([1, 7, 4, 3, 0, 9, 2, 5, 8, 6])

>>>

>>> np.random.permutation([1, 4, 9, 12, 15])
array([15,  1,  9,  4, 12])

>>>

>>> arr = np.arange(9).reshape((3, 3))
>>> np.random.permutation(arr)
array([[6, 7, 8],
       [0, 1, 2],
       [3, 4, 5]])

3.

这个函数的使用方法,在这里已经有前辈讲解过了,只是自己在测试的时候有一些思考,所以便写了这篇博客。下面是前辈文章的原话:

seed( ) 用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed( )值,则每次生成的随即数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。

编写如下第一份代码:

from numpy import *
num=0
while(num<5):
    random.seed(5)
    print(random.random())
    num+=1
1
2
3
4
5
6
运行结果为:

0.22199317108973948
0.22199317108973948
0.22199317108973948
0.22199317108973948
0.22199317108973948
1
2
3
4
5
可以看到,每次运行的结果都是一样的

修改代码,如下为第二份代码:

from numpy import *
num=0
random.seed(5)
while(num<5):
    print(random.random())
    num+=1
1
2
3
4
5
6
运行结果为:

0.22199317108973948
0.8707323061773764
0.20671915533942642
0.9186109079379216
0.48841118879482914
1
2
3
4
5

故对于该函数的使用,可总结为:

seed( ) 用于指定随机数生成时所用算法开始的整数值。 
1.如果使用相同的seed( )值,则每次生成的随即数都相同; 
2.如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。 
3.设置的seed()值仅一次有效

产生整数rand的原理是:

y=ax+b(mod   n)其中,n一般是一个很大的素数,几万。

a也是大素数。而且a,b,n都是常数。所以rand的产生决定于x,

他被称为seed。

3.

numpy的ravel() 和 flatten()函数

简介

首先声明两者所要实现的功能是一致的(将多维数组降位一维)。这点从两个单词的意也可以看出来,ravel(散开,解开),flatten(变平)。两者的区别在于返回拷贝(copy)还是返回视图(view),numpy.flatten()返回一份拷贝,对拷贝所做的修改不会影响(reflects)原始矩阵,而numpy.ravel()返回的是视图(view,也颇有几分C/C++引用reference的意味),会影响(reflects)原始矩阵。

两者功能

In [14]: x=np.array([[1,2],[3,4]])

# flattenh函数和ravel函数在降维时默认是行序优先
In [15]: x.flatten()
Out[15]: array([1, 2, 3, 4])

In [17]: x.ravel()
Out[17]: array([1, 2, 3, 4])

# 传入'F'参数表示列序优先
In [18]: x.flatten('F')
Out[18]: array([1, 3, 2, 4])

In [19]: x.ravel('F')
Out[19]: array([1, 3, 2, 4])

#reshape函数当参数只有一个-1时表示将数组降为一维
In [21]: x.reshape(-1)
Out[21]: array([1, 2, 3, 4])
#x.T表示x的转置
In [22]: x.T.reshape(-1)
Out[22]: array([1, 3, 2, 4])
  •  
  • 区别
>>> x = np.array([[1, 2], [3, 4]])
>>> x.flatten()[1] = 100
>>> x
array([[1, 2],
       [3, 4]])            
>>> x.ravel()[1] = 100
>>> x
array([[  1, 100],
       [  3,   4]])
  • faltten 是拷贝,不改变原数组,而ravel是直接改变原数组

4. np.c_与 np.r_的应用

例子
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.c_[a,b]

print(np.r_[a,b])
print(c)
print(np.c_[c,a])


np.r_是按列连接两个矩阵,就是把两矩阵上下相加,要求列数相等,类似于pandas中的concat()。
np.c_是按行连接两个矩阵,就是把两矩阵左右相加,要求行数相等,类似于pandas中的merge()。
结果:

[1 2 3 4 5 6]

[[1 4]
 [2 5]
 [3 6]]

[[1 4 1]
 [2 5 2]
 [3 6 3]]



在numpy中,一个列表虽然是横着表示的,但它是列向量。(非常重要的话)
--------------------- 

5 .
 

numpy.sort

numpy.sort(aaxis=-1kind='quicksort'order=None)

参数:

a--需要排列的数组

axis--排列参考的轴,默认是axis=-1(行排序),axis=1(行排序),axis=0(列排序),axis=none(放平后排序)

>>> a = np.array([[1,4],[3,1]])
>>> np.sort(a)                # 行排序
array([[1, 4],
       [1, 3]])
>>> np.sort(a, axis=None)     # 放平后排序
array([1, 1, 3, 4])
>>> np.sort(a, axis=0)        # 列排序
array([[1, 1],
       [3, 4]])

猜你喜欢

转载自blog.csdn.net/weixin_41580067/article/details/83018815