介绍array的一些知识点。
array是来自科学计算基础库Numpy的数组,可以方便的进行多维数组元素级的运算。
目录
1. 用eval()来处理输入
eval()是处理字符串函数,返回字符串的数字结果。可以将输入的数组识别成列表,作为参数传给数组进行创建。
import numpy as np
arr=np.array(eval(input()))
print(arr)
print(len(arr))
print(arr[0])
输入:
[[1,2,3],[4,5,6]]
输出:
[[1 2 3]
[4 5 6]]
2
[1 2 3]
2. 数组复制函数np.tile()
np.tile( arr, ( row, col )):参数1是要复制的数组,参数2以元组形式,表示复制几行几列。
(1)当仅有一个参数时:
对于每一维,复制元素,添加到后面:
(2)当有两个参数时,表示复制几行几列:
3. 删除数组元素
(1)首先说一下删除列表元素的三个方法:
list=['1','2','3','4']
list.remove('2')
del list[0]
list.pop(1)
其中remove()要知道列表中的元素名,del()和pop()只需要知道下标即可。
(2)np.delete( arr, index ):参数1是数组,参数2是下标。
import numpy as np
arr=np.array(eval(input()))
print(arr[0])
arr=np.delete(arr,0)
print(arr)
输入:
[[1,2,3],[4,5,6]]
输出:
[1 2 3]
[2 3 4 5 6]
3. 交换数组中两行值和两列值
(1)arr[ [n1, n2], : ] = arr[ [ n2, n1 ], : ]:交换行
(2)arr[ :, [n1, n2] ] = arr[ :, [ n2, n1 ] ]:交换列
当然,里面的参数n1,n2也可以有多个,前后对应即可。
import numpy as np
arr=np.array(eval(input()))
arr[[0,1],:]=arr[[1,0],:]
print(arr)
arr[:,[0,1]]=arr[:,[1,0]]
print(arr)
输入:
[[1,2,3],[4,5,6],[7,8,9]]
输出:
[[4 5 6]
[1 2 3]
[7 8 9]]
[[5 4 6]
[2 1 3]
[8 7 9]]
4. 创建值相同的一维数组
(1)先用list创建,然后作为参数传给np.array;
(2)使用np.full(( row,col ),val ):创建值为val的m*n维数组;
需要注意,一维数组,第二维为空,所以只需要给np.full传row即可。
import numpy as np
arr=np.array(eval(input()))
print(len(arr))
print(arr.shape)
arr2=np.full((3,),-1)
print(arr2)
print(arr2.shape)
输入:
[1,2,3]
输出:
3
(3,)
[-1 -1 -1]
(3,)
还有以下函数用来创建数组:
(1)np.zeros():创建指定形状全0数组;
(2)np.ones():创建指定形状全1数组;
(3)np.arange( start,end,step ):等差序列,不含终值;
(4)np.linespace( start,end,eleNum,endpoint=False):第三个参数是元素个数,第四个参数看是否含终值;
(5)np.logspace( start,end,eleNum):起始幂,终止幂,元素个数,默认基数为10,默认含终值。基数改为2,不包含终值:np.logspace(0, 2, 12, base=2, endpoint=False)
5. 将两个数组连起来
(1)np.append():
三种拼接方法,默认拼接成一维数组,沿第一个轴拼接和沿着第二个轴拼接:
import numpy as np
arr1=[[1,2,3],[4,5,6]]
arr2=[[7,8,9],[10,11,12]]
print(np.append(arr1,arr2)) # 扁平化之后输出,为一维数组
print(np.append(arr1,arr2,axis=0)) # 沿第一个坐标轴拼接
print(np.append(arr1,arr2,axis=1)) # 沿第二个坐标轴拼接
输出:
[ 1 2 3 4 5 6 7 8 9 10 11 12]
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
[[ 1 2 3 7 8 9]
[ 4 5 6 10 11 12]]
此时还能拼接值,np.append(arr1,value),不过会自动变为一维数组:
import numpy as np
arr2=np.array([[7,8,9],[10,11,12]])
arr3=np.append(arr2,1)
print(arr3)
输出:
[ 7 8 9 10 11 12 1]
(2)np.concatenate()
跟上面用法相同,不过无axis参数时默认是第一维:
import numpy as np
arr1=np.array([[1,2,3],[4,5,6]])
arr2=np.array([[7,8,9],[10,11,12]])
print(np.concatenate((arr1,arr2)))
输出:
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
(3)np.vstack()
连接两个一维数组,np.append()不能连接一维:
import numpy as np
arr1=np.array([1,2,3])
arr2=np.array([1,2,3])
print(np.vstack((arr1,arr2)))
输出:
[[1 2 3]
[1 2 3]]
6. np.fromiter()函数自动生成数组
传入的是可迭代对象和数据类型,返回数组:
可迭代对象可以是列表,元组等:
import numpy as np
list = [0, 1, 2, 3,4]
print(np.fromiter(list,dtype=np.int8))
tup=(1,2,3,4)
print(np.fromiter(tup,dtype=np.int8))
输出:
[0 1 2 3 4]
[1 2 3 4]