❶ python 查找二维数组的相邻元素
#coding=utf-8
'''
Createdon2014-3-21
@author:Neo
'''
defPrintList(array):#输出数组
foriinrange(array.__len__()):
printarray[i]
defSetList(array):#给数组赋值
row=11
col=11
foriinrange(array.__len__()):
forjinrange(array[i].__len__()):
array[i][j]=row
row+=10
col+=1
row=col
print"赋值后的二维数组:"
PrintList(array)
returnarray
defInitList(x,y):
#初始化一个二维数组
array=[([0]*y)foriinrange(x)]
returnarray
defGetListByCoord(array,radius,x,y):
#根据半径来确定数组的行数和列数
row_col=2*radius+1
#初始化结果数组
result=InitList(row_col,row_col)
#获取传入的array的行数和列数
arrayRow,arrayCol=len(array),len(array[0])
#坐标x、y的值即为结果数组的中心,依此为偏移
foriinrange(result.__len__()):
forjinrange(result.__len__()):
if(i+x-radius<0orj+y-radius<0or
i+x-radius>=arrayRoworj+y-radius>=arrayCol):
result[i][j]=0
else:
result[i][j]=array[i+x-radius][j+y-radius]
#打印结果
print"结果为:"
PrintList(result)
if__name__=='__main__':
#数组7列6行
array=SetList(InitList(6,7))
GetListByCoord(array,1,3,3)
GetListByCoord(array,2,3,3)
GetListByCoord(array,2,0,0)
GetListByCoord(array,2,0,6)
GetListByCoord(array,2,5,0)
GetListByCoord(array,2,5,6)
运行结果为:
---------------------------------------------------------------------------------------------
赋值后的二维数组:
[11, 21, 31, 41, 51, 61, 71]
[12, 22, 32, 42, 52, 62, 72]
[13, 23, 33, 43, 53, 63, 73]
[14, 24, 34, 44, 54, 64, 74]
[15, 25, 35, 45, 55, 65, 75]
[16, 26, 36, 46, 56, 66, 76]
结果为:
[33, 43, 53]
[34, 44, 54]
[35, 45, 55]
结果为:
[22, 32, 42, 52, 62]
[23, 33, 43, 53, 63]
[24, 34, 44, 54, 64]
[25, 35, 45, 55, 65]
[26, 36, 46, 56, 66]
结果为:
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 11, 21, 31]
[0, 0, 12, 22, 32]
[0, 0, 13, 23, 33]
结果为:
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[51, 61, 71, 0, 0]
[52, 62, 72, 0, 0]
[53, 63, 73, 0, 0]
结果为:
[0, 0, 14, 24, 34]
[0, 0, 15, 25, 35]
[0, 0, 16, 26, 36]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
结果为:
[54, 64, 74, 0, 0]
[55, 65, 75, 0, 0]
[56, 66, 76, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
❷ numpy基础——ndarray对象
numpy 是使用python进行数据分析不可或缺的第三方库,非常多的科学计算工具都是基于 numpy 进行开发的。
ndarray对象是用于存放同类型元素的多维数组,是numpy中的基本对象之一,另一个是func对象。本文主要内容是: 1 、简单介绍ndarray对象 ; 2、ndarray对象的常用属性 ; 3、如何创建ndarray对象 ; 4、ndarray元高悔素访问 。
它的维度以及个维度上的元素个数由 shape 决定。
标题中的函数就是numpy的构造函数,我们可以使用这个函数创建一个ndarray对象。构造函数有如下几个可选参数:
实例:
接下来介绍ndarray对象最常用的属性
实例:
使用 array 函数,从常规的python列表或者元组中创建数组,元素的类型由原序列中的元素类型确定。
实例:
subok 为 True ,并且object是败念敬ndarray子类时(比如矩阵类型),返回的数组保留子类类型
某些时候,我们在创建数组之前已经确定了数组的维度以及各维度的长度。这时我们就可以使用numpy内建的一些函数来创建ndarray。
例如:函数 ones 创建一个全1的数组、函数 zeros 创建一个全0的数组、函数 empty 创建一个内容随机的数组,在默认情况下,用这些函数创建的数组的类型都是float64,若需要指定数据类型,只需要闲置 dtype 参数即可:
上述三个函数还有三个从已知的数组中,创建 shape 相同的多维数组: ones_like 、 zeros_like 、 empty_like ,用法如下:
除了上述几个用于创建数组的函数,还有如下几个特殊的函数:
特别地, eye 函数的全1的对角线位置有参数k确定
用法如下:
除了上面两个函数还有其他几个类似的从外部获取数据并创建ndarray,比如: frombuffer 、 fromfile 、 fromiter ,还没用过,等用到了在详细记录
ndarray提供了一些创建二维数组的特殊函数。numpy中matrix是对二维数组ndarray进行了封装之后的子类。这里介绍的关于二维数组的创建,返回的依旧是一个ndarray对象,而不是matrix子类。关于matrix的创建和操作,待后续笔记详细描述。为了表述方便,下面依旧使用 矩阵 这一次来表示创建的二维数组。
对于一维的ndarray可以使用python访问内置list的方式进行访问:整数索引、切片、迭代等方式
关于ndarray切片
与内置list切片类似,形式:
array[beg:end:step]
beg: 开始索引
end: 结束索引(不包含这个元素)
step: 间隔
需要注意的是 :
特别注意的是,ndarray中的切片返回的数组中的元素是原数组元素的索引,对返回数组元素进行修改会影响原数组的值
除了上述与list相似的访问元素的方式,ndarray有一种通过 列表 来指定要从ndarray中获取元素的索引,例如:
多维ndarray中,每一维都叫一个轴axis。在ndarray中轴axis是非常重要的,有很多对于ndarray对象的运算都是基于axis进行,比如sum、mean等都会有一个axis参数(针对对这个轴axis进行某些运察慎算操作),后续将会详细介绍。
对于多维数组,因为每一个轴都有一个索引,所以这些索引由逗号进行分割,例如:
需要注意的是 :
多维数组的迭代
可以使用ndarray的 flat 属性迭代数组中每一个元素
❸ Numpy array数组的常见运算
Numpy是Python最流行的数学计算库之一,它 支持多维数组与矩阵的各种运算。在Numpy库中ndarray对象是其核心,它支持任意维度的数组(向量),所有的运算都是以array为基础展开的。此外,在 Numpy的 矩阵mat是array的一个子集,也就是二维的数组。
下面我们来看一下array的基本运算。
NumPy数组在与数值进行运算时,具有广播特性。也就是说,数组中的每个元素都会进行同样的运算,这些运算包括“+、-、*、/、**、&、|、^”等。
例如:array([1,2,3,4,5])*2 相当于array([1*2,2*2,3*2,4*2,5*2]), 代码示例如下。
对于维度相同的两个数组,将按照元素逐项进行运算。以‘*’为例:
已知
那么:
代码示例如下
对于维度不同的两个数组,则会进行广播运算, 例如
那么
我们知道对于向量
那么a与b的点积为:
在Numpy中,一维数组的点积(dot)和内积(inner)是相同的。但是对于多维数组来说,则有差别。inner运算中,可以将数组最后一个维度(行)视为向量,两个数组的内积就是逐项对这些向量的内积。而dot运算则是前一个数组雨后一个数组转置后的结果,即inner(a,b.T).
以上代码在Python 3.7中运行通过。
❹ 什么是数组的维度,python 的ndim的使用
数组的维度就是一个数组中的某个元素,当用数组下标表示的时候,需要用几个数字来表示才能唯一确定这个元素,这个数组就是几维。numpy中直接用 * 即可表示数与向量的乘法,参考python 2.7的一个例子:inport numpy as np a = np.array([1,2,3,4]) # 向量 b = 5 # 数 print a*b ++++++++++++ [5,10,15,20]
❺ Python——ndarray多维数组基本操作(1)
数组允许进行批量操作而无需使用for循环,因此更加简便,这种特性也被称为向量化。任何两个等尺寸之间的算术操作都应用逐元素操作的方式进行。
同尺度数组之间的比较,会产生一个布尔型数组。
上述操作均是在同尺度数组之间进行的,对于不同尺度数组间的操作,会使用到广播特性。
索引:获取数组中特定位置元素的过程;
切片:获取数组元素子集的过程。
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如何获取某个数组中某些下标的元素
print(your_list.index('your_item')) ###your_list为列表名称 your_item为需要修该的数据。
print [i for i, x in enumerate(your_list) if x == 'your_item']
your_list为待查list,your_item为具体要查的元素,打印出一个包含所有要查元素下标的列表。
【python列表】
1、可以先创建一个空列表,可以使用type(),查看类型。
❼ Python—Numpy库的用法
NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。
NumPy 支持比 Python 更多种类的数值类型。 下表显示了 NumPy 中定义的不同标量数据类型。
[('age', 'i1')]
[10 20 30]
[('abc', 21, 50.0), ('xyz', 18, 75.0)]
每个内建类型都有一个唯一定义它的字符代码:
[[1, 2] [3, 4] [5, 6]]
[[[ 0, 1, 2] [ 3, 4, 5] [ 6, 7, 8] [ 9, 10, 11]] [[12, 13, 14] [15, 16, 17] [18, 19, 20] [21, 22, 23]]]
[1 2 3]
[1 2 3]
[(1, 2, 3) (4, 5)]
原始数组是: [[ 0 5 10 15] [20 25 30 35] [40 45 50 55]]
修改后的数组是: 0 5 10 15 20 25 30 35 40 45 50 55
原始数组是: [[ 0 5 10 15] [20 25 30 35] [40 45 50 55]]
原始数组的转置是: [[ 0 20 40] [ 5 25 45] [10 30 50] [15 35 55]]
修改后的数组是: 0 5 10 15 20 25 30 35 40 45 50 55
C风格是横着顺序
F风格是竖着的顺序
原始数组是: [[ 0 5 10 15] [20 25 30 35] [40 45 50 55]]
修改后的数组是: [[ 0 10 20 30] [ 40 50 60 70] [ 80 90 100 110]]
第一个数组: [[ 0 5 10 15] [20 25 30 35] [40 45 50 55]]
第二个数组: [1 2 3 4]
修改后的数组是: 0:1 5:2 10:3 15:4 20:1 25:2 30:3 35:4 40:1 45:2 50:3 55:4
原始数组: [[0 1 2 3] [4 5 6 7]]
调用 flat 函数之后: 5
原数组: [[0 1 2 3] [4 5 6 7]]
展开的数组:默认是A [0 1 2 3 4 5 6 7]
以 F 风格顺序展开的数组: [0 4 1 5 2 6 3 7]
原数组: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]]
转置数组: [[ 0 4 8] [ 1 5 9] [ 2 6 10] [ 3 7 11]]