1.将多维数组展成一维
两种方式,分别为:
a=np.array([[0,1,2,3],
[4,5,6,7]])
#1
a.flatten() #out:array([0, 1, 2, 3, 4, 5, 6, 7])
#2
a.ravel() #out:array([0, 1, 2, 3, 4, 5, 6, 7])
两者的区别:
a.flatten()[0]=8
print(a)
#out:([[0,1,2,3],
# [4,5,6,7]])
a.ravel()[0]=8
print(a)
#out:([[8,1,2,3],
# [4,5,6,7]])
总结:a.ravel()
数组进行操作会改变原来a数组中的值,对flatten()
生成的数组操作不会改变原数组。
2.数组的遍历
使用的是numpy.nditer()
这个方法,具体函数说明请见官方函数说明。
#使用如下方式也可以迭代,这种直接迭代,i是每一行的元素集合
arr=np.arrange(10).reshape(2,5)
for i in arr:
print(i)
进一步说明以后再改,先放一个其他人写的。
3.数组排序/找最大的k个数
1.用于找到最大的k个数
numpy.argpartition(a, kth, axis=-1, kind='introselect', order=None)
在快排算法中,有一个典型的操作:partition。这个操作指:根据一个数值x,把数组中的元素划分成两半,使得index前面的元素都不大于x,index后面的元素都不小于x。numpy中的argpartition()函数就是起的这个作用。对于传入的数组a,先用O(n)复杂度求出第k大的数字,然后利用这个第k大的数字将数组a划分成两半。此函数不对原数组进行操作,它只返回分区之后的下标。一般numpy中以arg开头的函数都是返回下标而不改变原数组。此函数还有另外两个参数:
kind:用于指定partition的算法
order:表示排序的key,也就是按哪些字段进行排序
当我们只关心topK时,我们不需要使用np.sort()对数组进行全量排序,np.argpartition()已经够用了。
官方API介绍
4.数组乘和矩阵乘(点乘)
“*”在numpy中是数组乘
".dot()"是矩阵乘法,即行列相乘相加
下面举例说明:
- 数组乘
a = numpy.array([
[1,2],
[3,4]
])
b = numpy.array([
[5,6],
[7,8]
])
a*b
>>>array([[ 5, 12],
[21, 32]])
- 矩阵乘
a = numpy.array([
[1,2],
[3,4]
])
b = numpy.array([
[5,6],
[7,8]
])
#下面两种方式都可以
a.dot(b)#1
numpy.dot(a,b)#2
>>>array([[19, 22],
[43, 50]])
5. 多维数组按轴运算(如按行取均值)
c = np.array([[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]])
print(c.mean(axis=1))#行
print(c.mean(axis=0))#列
>>>[ 2.5 5.5 8.5]
>>>[ 4. 5. 6. 7.]