Python 记录(二)

导读:本篇文章讲解 Python 记录(二),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!