Python的X[y==1, 0]

最近研究逻辑回归,Iris花的经典示例,代码就不全粘贴了,具体代码参看“Iris花逻辑回归与实现

 plt.plot(X[y==0, 0], X[y==0,1], "bs")
plt.plot(X[y==1, 0], X[y==1, 1], "g^")

X[y==0, 0]中的y==0是个什么东东,为什么可以占据X的第一个位置?

首先我们看一下X是个什么?

 from sklearn import datasets
iris = datasets.load_iris() X = iris["data"][:, (2, 3)] # petal length, petal width
y = (iris["target"] == 2).astype(np.int)
print(X)
 

Output:

[[1.4 0.2]
[1.4 0.2]
...
[5.1 1.8]]
  X是一个数组,数组的元素是一个二元组。在解释X[y==0, 0]之前,首先要明白X[:,:]左面:代表的是行范围,右边“:”代表的是列范围,如果是冒号则代表全部,否则就像代码中第四行那样,指定一个范围;那么无论是“:”,还是指定一个范围(类似于(2,3)),其实本质都是会被翻译成一个true/false的一维一元数组,每个元素都是代表数组对应位置的元素是否要出现。
  比如,y==0,print之后其实是[True True False ...],那么X[y==0, 0],就X的前三个元素而言,分别代表返回(包含),返回(包含),不返回(不包含);与之类似对于“iris["data"][:, (2, 3)]”这个写法,左边的那个":"代表的行是[True,True, ... ,True],全是true;
  那么X[y==0, 0]中,第二个0代表什么意思呢?y==1解决了行中那些返回(那些为true的返回),右边的那个数字代表就是返回那一列,0,代表返回的是第一列,就是上面那个1,4,1.4...5.1;与之类似对于“iris["data"][:, (2, 3)]”这个写法,代表列是要返回第三列和第四列。
  这里看到在python里面行列的处理模式是不一样的,行的取舍是通过一个True/ False数组来实现的,列的取舍确实通过指定了那一列;这个其实从矩阵的角度能够更好的理解。
 
concatenate
 
 X_outliers=np.array([[3.4, 1.3], [3.2, 0.8]])
y_outliers=np.array([0, 0]) Xo1=np.concatenate([X, X_outliers[:1]], axis=0)
yo1=np.concatenate([y, y_outliers[:1]], axis=0)
Xo2=np.concatenate([X, X_outliers[1:]], axis=0)
yo2=np.concatenate([y, y_outliers[1:]], axis=0)

numpy里面的concatenate的涵义是合并矩阵;axis=0代表是添加一行,axis=1则代表添加一列。以此为例:

pprint(X)显示为:

u'X:'
array([[1.4, 0.2],
[1.4, 0.2],
...

[5.1, 1.8]])

pprint(Xo1)显示为:

u'Xo1:' 
array([[1.4, 0.2],
[1.4, 0.2],
...

[5.1, 1.8],

[3.4, 1.3]])

这其实就是行添加了一行。

原生数组和reshape之后数组

X_test = np.linspace(1,5,5)
pprint (X_test)
X_tmp = X_test.reshape(-1, 1)
pprint(X_tmp)

输出:

array([1., 2., 3., 4., 5.])
array([[1.], [2.], [3.], [4.], [5.]])

python数组常见操作:

Python原生是没有数组的,[]这种类型在python里面叫List;二维数组可以通过lsti[i][i]来进行索引(array是通过[i, j]来进行索引),支持通过":"来进行范围索引,但是像前面描述的,只是支持一个维度的索引,例如[:5][1:](对于array而言可以通过[:,:]来进行索引)。
如果是数组的话,还是使用numpy里面的array;
numpy里面提供的是array以及可以通过[x1:x2,y1:y2]模式来索引矩阵形式;同时可以通过array.shape方式来获取矩阵的行数/列数;同时可以通过reshape来进行行列重置;可以通过.T来进行“转置”。
matrix是numpy的array的一个子集,同样支持“:”模式的索引,以及shape[i]获取行、列的数量;但是只支持矩阵形式:二维数组形式。
matrix和numpy的乘法(*)模式不同,matrix是乘数的行*被乘数的列这种模式;array则是同位数的相乘。
 
互转:
list转array:np.array(list)
list转matrix:np.mat(list)
array转list:data.toList()
array和matrix互转:np.asmatrix, np.asarray
 
array想要采用matrix的乘法:np.dot(array1, array2)
matrix想要同位数的乘法:np.multiply(mat1, mat2)
 
成员
# 属性
ndarray.shape: 多維陣列的大小(形狀)
ndarray.ndim: 多維陣列的維度
ndarray.itemsize: 陣列當中元素的大小(佔幾個 byte)
ndarray.nbytes: 整個陣列所有元素的大小總計
ndarray.T: 轉置矩陣,只能在維度 <= 2 的時候使用,與 self.transpose() 效果相同
ndarray.flat: 把陣列扁平化輸出
 
# 格式转换
ndarray.item: 類似 List 的 Index,把 Array 扁平化取得某 Index 的 value
ndarray.tolist: 把 NumPy.ndarray 輸出成 Python 原生 List 型態
ndarray.itemset: 把 ndarray 中的某個值(純量)改掉
 
# 维度操作
ndarray.reshape(shape): 把同樣的資料以不同的 shape 輸出(array 的 total size 要相同)
ndarray.resize(shape): 重新定義陣列的大小
ndarray.flatten(): 把多維陣列收合成一維陣列(扁平化&Copy)
ndarray.ravel(): 回傳扁平化的陣列(無 Copy)
 
# 项目选择与操作
ndarray.take(indices): 根據輸入索引值來得到指定陣列
ndarray.put(indices, values): 根據索引值改變陣列 value
ndarray.repeat(times): 重複陣列的值(類似擴張)
ndarray.sort(): 把陣列當中的元素排序
ndarray.sum(): 加總多維陣列(可指定加總的維度根據)
---------------------
参考
 
 
 

Python中的数组和list的更多相关文章

  1. 基于Python中numpy数组的合并实例讲解

    基于Python中numpy数组的合并实例讲解 下面小编就为大家分享一篇基于Python中numpy数组的合并实例讲解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 Python中n ...

  2. python中的数组和列表

    ####转自:模式识别实验室主任   #环境win64+anaconda+python3.6 list & array (1)list不具有array的全部属性(如维度.转置等) 代码1: # ...

  3. python中合并数组的方法

    一.数组纵向合并 1.使用np.vstack()函数 [code] #数组 a = [[1,2,3],[4,5,6]] b = [[1,1,1],[2,2,2]] #纵向合并 c = np.vstac ...

  4. Python中ndarray数组切片问题a[-n -x:-y]

    先看看如下代码: >>a=np.arange(10)>>a array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])>>a[-7:] array( ...

  5. python中使用数组作为索引

    链接:https://blog.csdn.net/yzlh2009/article/details/114118470 情况一,索引数组为整数值 情况二,索引数组为bool值

  6. 一文搞懂Python中的所有数组数据类型

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  7. python中的归并排序

    本来在博客上看到用python写的归并排序的程序,然后自己跟着他写了一下,结果发现是错的,不得不自己操作.而自己对python不是非常了解所以就变百度边写,最终在花了半个小时之后就写好了. def m ...

  8. Python中Numpy ndarray的使用

    本文主讲Python中Numpy数组的类型.全0全1数组的生成.随机数组.数组操作.矩阵的简单运算.矩阵的数学运算. 尽管可以用python中list嵌套来模拟矩阵,但使用Numpy库更方便. 定义数 ...

  9. python中输入某年某月某日,判断这一天是这一年的第几天?

    输入某年某月某日,判断这一天是这一年的第几天?程序分析 特殊情况,闰年时需考虑二月多加一天: 直接上代码 #定义一个函数,判断是否为闰年 def leapyear(y): return (y % 40 ...

随机推荐

  1. Bug03_SSM整合_mybatis result maps collection already contains value...

    这个问题是在映射文件,但是这个映射文件是自动生成的. 所以想起来可能是在自动生成映射文件,pojo类时操作有问题.第一次运行时,出现错误,没有删除已经生成的文件就直接运行了第二次. 解决办法:删除旧的 ...

  2. SQL注入之Sqli-labs系列第二十三关(基于过滤的GET注入)

    开始挑战第二十三关(Error Based- no comments) 先尝试下单引号进行报错 再来利用and来测试下,加入注释符#,编码成%23同样的报错 再来试试--+,同样的效果 同样的,先看看 ...

  3. 第76课 最小生成树(Prim)

    图解: 添加prim函数: #ifndef GRAPH_H #define GRAPH_H #include "Object.h" #include "SharedPoi ...

  4. Python学习笔记第十二周

    目录: 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令事务 索引 创建数据库 外键 增删改查表 权限 python 操作mysql  ORM sqla ...

  5. C高级第二次PTA作业

    6-7 删除字符串中数字字符 1.设计思路: (1)算法: 第一步:定义一个字符数组item,输入一个字符串赋给字符数组item.调用函数delnum, 第二步:在函数delnum中定义循环变量i=0 ...

  6. 简易计算器的java实现

    伪代码 public class MainTestwei { 定义两个数组,List<Double> number和 List<Character>calculation分别用 ...

  7. 洛谷 P4779 :【模板】单源最短路径(标准版)(Dijkstra+堆优化+链式前向星)

    题目背景 2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路. 然后呢? 100→60: Ag→Cu: 最终,他因此没能与理想 ...

  8. ATM-java

    通过学习JAVA,我的进步不是很多,了解了不多的编程知识,但是我一直在进步,我发现我有很大的进步空间,每天都有一点点的进步使我每天都很充实.还记得我编写的第一个 经典程序“hello Word”.从那 ...

  9. EasyUI datagrid 选择单元格 出现文本框 修改 四

    @disabled = "disabled", 只读属性 数据初始化 public JsonResult RateList(string dispatch_number, stri ...

  10. 一道dp[不太好写]

    http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2281 Description An arithmetic progression ...