扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
数组允许进行批量操作而无需使用for循环,因此更加简便,这种特性也被称为向量化。任何两个等尺寸之间的算术操作都应用逐元素操作的方式进行。
成都创新互联专注于企业成都全网营销、网站重做改版、古塔网站定制设计、自适应品牌网站建设、成都h5网站建设、商城网站定制开发、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为古塔等各大城市提供网站开发制作服务。
同尺度数组之间的比较,会产生一个布尔型数组。
上述操作均是在同尺度数组之间进行的,对于不同尺度数组间的操作,会使用到广播特性。
索引:获取数组中特定位置元素的过程;
切片:获取数组元素子集的过程。
new_a = a.astype(new_type)
astype()方法一定会创建新的数组(原始数据的一个拷贝),即使两个类型一致。
ls = a.tolist()
转置是一种特殊的数据重组形式,可以返回底层数据的视图而不需要复制任何内容。
数组拥有 transpose 方法,也有特殊的 T 属性。
对于更高纬度的数组, transpose 方法可以接受包含轴编号的元组,用于转置轴。
ndarray的 swapaxes 方法,通过接受一对轴编号作为参数,并对轴进行调整用于重组数据。
swapaxes 方法返回的是数据的视图,而没有对数据进行复制。
Reference:
《Python for Data Analysis:Data Wrangling with Pandas,Numpy,and IPython》
在Python中,一个像这样的多维表格可以通过“序列的序列”实现。一个表格是行的序列。每一行又是独立单元格的序列。这类似于我们使用的数学记号,在数学里我们用Ai,j,而在Python里我们使用A[i][j],代表矩阵的第i行第j列。
这看起来非常像“元组的列表”(Lists of Tuples)。
“列表的列表”示例:
我们可以使用嵌套的列表推导式(list comprehension)创建一个表格。 下面的例子创建了一个“序列的序列”构成的表格,并为表格的每一个单元格赋值。
table= [ [ 0 for i in range(6) ] for j in range(6) ]print tablefor d1 in range(6):for d2 in range(6):table[d1][d2]= d1+d2+2print table123456程序的输出结果如下:
[[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]],
[[2, 3, 4, 5, 6, 7], [3, 4, 5, 6, 7, 8], [4, 5, 6, 7, 8, 9],
[5, 6, 7, 8, 9, 10], [6, 7, 8, 9, 10, 11], [7, 8, 9, 10, 11, 12]]
1234
这个程序做了两件事:创建了一个6 × 6的全0表格。 然后使用两枚骰子的可能组合的数值填充表格。 这并非完成此功能最有效的方式,但我们通过这个简单的例子来演示几项技术。我们仔细看一下程序的前后两部分。
程序的第一部分创建并输出了一个包含6个元素的列表,我们称之为“表格”;表格中的每一个元素都是一个包含6个0元素的列表。它使用列表推导式,对于范围从0到6的每一个j都创建对象。每一个对象都是一个0元素列表,由i变量从0到6遍历产生。初始化完成之后,打印输出二维全0表格。
推导式可以从里向外阅读,就像一个普通表达式一样。内层列表[ 0 for i in range(6) ]创建了一个包含6个0的简单列表。外层列表[ [...] for j in range(6) ]创建了这些内层列表的6个深拷贝。
程序的第2个部分对2个骰子的每一个组合进行迭代,填充表格的每一个单元格。这由两层嵌套循环实现,每一个循环迭代一个骰子。外层循环枚举第一个骰子的所有可能值d1。内层循环枚举第二个骰子d2。
更新每一个单元格时需要通过table[d1]选择每一行;这是一个包含6个值的列表。这个列表中选定的单元格通过...[d2]进行选择。我们将掷骰子的值赋给这个单元格,d1+d2+2。
其他示例:
打印出的列表的列表不太容易阅读。下面的循环会以一种更加可读的形式显示表格。
for row in table:
print row[2, 3, 4, 5, 6, 7]
[3, 4, 5, 6, 7, 8]
[4, 5, 6, 7, 8, 9]
[5, 6, 7, 8, 9, 10]
[6, 7, 8, 9, 10, 11]
[7, 8, 9, 10, 11, 12]
12345678910111213作为练习,读者可以试着在打印列表内容时,再打印出行和列的表头。提示一下,使用"%2d" % value字符串运算符可以打印出固定长度的数字格式。显示索引值(Explicit Index Values)。
我们接下来对骰子表格进行汇总统计,得出累计频率表。我们使用一个包含13个元素的列表(下标从0到12)表示每一个骰子值的出现频率。观察可知骰子值2在矩阵中只出现了一次,因此我们期望fq[2]的值为1。遍历矩阵中的每一个单元格,得出累计频率表。
fq= 13 * [0]for i in range(6):for j in range(6):c= table[i][j]fq[ c ] += 112345使用下标i选出表格中的行,用下标j从行中选出一列,得到单元格c。然后用fq统计频率。
这看起来非常的数学和规范。
Python提供了另外一种更简单一些的方式。
使用列表迭代器而非下标,表格是列表的列表,可以采用无下标的for循环遍历列表元素。
fq= 13 * [0]print fqfor row in table:for c in row:fq[c] += 1print fq[2:
不对。
int函数是将字符串或者数字变成整形,其具体表示形式为int(),num函数是将对象转为具有向量算术运算和复杂广播能力的多维数组,其表示形式为num()。
Python中,函数只能单独使用。
Python对二维数组求和的方法:首先定义好一个二维数组;然后使用map函数对数组里每一个元素进行sum操作即可对二维数组求和。
关于二维数组求和的几种方法:
a = [[1,2],[3,4],[5,6]]
方法一 sum(map(sum,a))
map(func,a) 函数是对a中的每一个元素进行sum操作
解释一下map函数, map(fund, a) equals [func(i) for i in a] and return a list
方法二 sum(sum(i) for i in a)
方法三 sum(sum(a[i]) for i in range(len(a)))
方法四 reduce(lambda x,y:x+y , reduce(lambda x,y:x+y, a))
解释一下reduce(fun,a),reduce返回的是一个结果值而不是一个list,第一步的时候是([1,2]+[3,4]) + [5,6]
得到一个[1,2,3,4,5,6], 然后进行的运算是(((((1+2)+3)+4)+5)+6) = 21
一般来说最常用的还是1和3这两种方法,不知道map or reduce, 一般都会采用3, 而知道的应该会采用1,比较简洁。
推荐课程:Python核心基础(尚硅谷)
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流