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. 字典树trie学习

    字典树trie的思想就是利用节点来记录单词,这样重复的单词可以很快速统计,单词也可以快速的索引.缺点是内存消耗大 http://blog.csdn.net/chenleixing/article/de ...

  2. Oracle 12c中新建pdb用户登录问题分析

    Oracle 12c新建用户登录问题分析1 用sys用户新建用户,提示公用用户名或角色名无效.原因:Oracle 12c中,在容器中建用户(或者应该称为使用者),须在用户名前加c##.默认登录连接的就 ...

  3. 简单的SpringWebFlow例子及遇到的问题

    这段时间在看<Spring 实战>里面有讲Spring Web Flow,觉得里面的例子过于复杂,不适合新手,于是在网上找了个例子,跟着写 以下是项目的目录,我是基于maven搭建项目的 ...

  4. ionic的actionsheet安卓样式不正常的坑及解决之道

    这是actionsheet该有的样子,可是android下变成了这样: 百度后,发现修改lonic.css,注释这段代码就可以了:

  5. File类操作中的IOException异常

     代码: File file= newFile("demo"+File.separator+"HelloWorld.txt"); file.createNe ...

  6. react native 之 获取键盘高度

    多说不如多撸: /** * Created by shaotingzhou on 2017/2/23. *//** * Sample React Native App * https://github ...

  7. 从输入URL到页面加载发生了什么?

    总体来说分为以下几个过程: DNS解析 TCP连接 发送HTTP请求 服务器处理请求并返回HTTP报文 浏览器解析渲染页面 连接结束 具体内容点这里

  8. 设计精美Power BI报告的五大秘诀

    众所周知,Power BI可以帮助您创建交互式且信息丰富的报告,但使用Power BI 制作精美而实用的报告对我们这群IT人员而言,却是一个巨大的痛苦:但个人觉得不能就此止步,通过不断实践练习,小悦采 ...

  9. vim 使用 Tricks

    vim + /etc/fstab:打开文档时直接光标直接置于最后一行首部: 1. 最小影响的修改:非 insert mode 修改 del/x:删除光标所在字符: r:replace,替换光标所在的字 ...

  10. npm 包管理器的使用

    1. 权限问题 Warning "root" does not have permission to access the dev dir · Issue #454 · nodej ...