文章目录
1.关于sum等函数中keepdims参数
Numpy中很多函数提供了 axis
参数,这个参数可以指定计算按照的方向,这里注意理解 “按照方向”,也就是在这个方向上进行 “压缩”, 也就是说是计算的方向,而非最后保存数据的方向。
另一个参数则与之相关,keepdims
参数决定了是否保持原有的维数,但是与严格意义上的原有维数不同,这个参数的功能通过例子看更清楚:
import numpy as np
arr = np.random.randint(1, 10, (3, 4))
print(arr)
print('未指定 keepdims 参数:')
r1 = np.sum(arr, axis=1)
print(r1)
print('指定 keepdims 参数:')
r2 = np.sum(arr, axis=1, keepdims=True)
print(r2)
输出:
[[7 8 7 6]
[3 4 5 7]
[7 9 2 7]]
未指定 keepdims 参数:
[28 19 25]
指定 keepdims 参数:
[[28]
[19]
[25]]
同样,在 tensorflow 中的 reduce_sum()
和 reduce_mean()
等函数也可以这样使用。
像这样的计算方式在很多地方都有应用,例如,对向量进行标准化,可以这样计算:
import numpy as np
vecs = np.random.randint(1, 10, (3,4))
print('原始向量:')
print(vecs)
print('正则化结果:')
norm = np.sqrt(np.sum(np.square(vecs), axis=1, keepdims=True))
print(norm)
print('标准化结果:')
res = vecs / norm
print(res)
输出结果:
原始向量:
[[9 7 8 9]
[4 1 7 7]
[2 5 4 5]]
正则化结果:
[[16.58312395]
[10.72380529]
[ 8.36660027]]
标准化结果:
[[0.54272042 0.42211588 0.48241815 0.54272042]
[0.37300192 0.09325048 0.65275337 0.65275337]
[0.23904572 0.5976143 0.47809144 0.5976143 ]]
更方便的写法:
import numpy as np
a = np.random.randint(1, 10, (3,2))
print(a)
norm = np.linalg.norm(a, axis=1, keepdims=True)
print(norm)
res = a / norm
print(res)
输出结果:
[[2 2]
[2 7]
[4 2]]
[[2.82842712]
[7.28010989]
[4.47213595]]
[[0.70710678 0.70710678]
[0.27472113 0.96152395]
[0.89442719 0.4472136 ]]
2.Python字符数字之间相互转换的函数
int() 转化为整数
long() 转化为长整型
str() 转化为字符串
chr() 转化为字符
float() 转化为浮点数
3.如何在数组中筛选出符合条件的一些数据
例如:
a = np.array([...])
b = a[a[:,0] == 3] # 这是筛选出a中第一列等于3的所有行,注意直接返回的是索引
# 如果有多个搜索条件
c = a[(a[:,0]==3)|(a[:,1]==4)] # 这是找到第一列3第二列4的所有行,注意这是或
c = a[(a[:,0]==3) & (a[:,1]==4)] # 这是找到第一列3并且第二列4的所有行 这是并且关系
利用广播机制,可以很方便的直接对数组进行比较,注意 |
和 &
的使用
4.Python 中字符串前面添加 ‘r’
告诉编译器 ,后面的字符串是一个 raw string ,不要刻意将 \
进行转义。
在 regular expression 中,正则串中经常会出现 \
,所以最好在前面加上 r
5.注意使用 for in 对数组进行遍历的时候 对值的修改无效
a = np.array([1,2,3])
for val in a:
print(val)
val = 4
print(a)
输出:
1
2
3
[1 2 3]
其实也很好理解
6.反转字典的键值
reverse_dic = dict(zip(dic.values(), dic.keys()))
7.如何查找一个指定元素并返回索引值
对于 list 来说:
# 直接使用 list.index()函数
a = [1,2,3,4]
b = a.index(2)
c = a.index(4)
print(b)
print(c)
对于数组:
注意 np.array() 数组类型没有index() 函数,使用 np.where()方法进行判断:
a = np.array([1, 2, 3, 4])
b = np.where(a==3)
print(b)
print(type(b))
c = a[b]
print(type(c))
print(c)
输出结果:
(array([2], dtype=int64),)
<class 'tuple'>
<class 'numpy.ndarray'>
[3]
这个方法的问题在于 返回的是一个数组(即使只有一个元素符合要求),所以在使用索引的时候要注意。但是对于 np.array() 类型来说,也可以直接接受一个数组作为下标,所以对于取出索引值下的数据可以直接使用。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/116700.html