【Python】收集的高级函数、功能

本文详细介绍了Python的高级函数和实用技巧,包括numpy的数学函数、dict对象的特性和操作、日志写入、numpy的array操作、random模块的随机选择功能、数据处理方法以及错误处理。讲解了log函数、dict的键值对应、dump和dumps的区别、日志写入的注意事项、numpy的array添加元素、文件备份拷贝、networkx处理复杂网络数据、矩阵运算和序列操作等,帮助读者提升Python编程技能。
摘要由CSDN通过智能技术生成

说明:本文更新顺序是从下到上,最新的函数更新在开头。

 

np.log

log默认以e为底,log10, log2, log1p, emath.log

dict对象的keys()和values()返回的值,只要之间无修改,则总是一一对应的。

搜dict的key, value顺序, 中文没搜到想要的结果。

英文答案链接:python-dictionary-are-keys-and-values-always-the-same-order

在调用dict.keys()和dict.values()时,只要期间没有对dict对象做过干预或变更操作,则得到的结果, 键-值顺序总是一一对应的。

Python种dump和dumps的区别

dumps是将dict转化成str格式,loads是将str转化成dict格式。

dump和load也是类似的功能,只是与文件操作结合起来了。

Python日志实时写入

open 函数中有一个bufferin的参数,默认是-1,如果设置为0是,就是无缓冲模式。 
但是用二进制模式打开这个文件,并且把要写入的信息转换byte -like如下。

with open("test.txt",'wb',buffering=0) as f:
#wb是写模式加二进制模式
    f.write(b"hello!")在字符串前加b,转换成二进制

如果没用二进制打开文件会提示ValueEorror:

没把字符串转成二进制会提示:TypeError: a bytes-like object is required, not ‘str’

测试:

class Logger(object):
    def __init__(self, log_path="default.log"):
        self.terminal = sys.stdout
        # self.log = open(log_path, "w+")
        self.log = open(log_path, "wb", buffering=0)

    def print(self, message):
        self.terminal.write(message + "\n")
        self.log.write(message.encode('utf-8') + b"\n")

    def print_time(self, text=""):
        message = time.strftime('[ %Y-%m-%d %H:%M ]', time.localtime(time.time())) + text
        self.print(message)

    def flush(self):
        self.terminal.flush()
        self.log.flush()

    def close(self):
        self.log.close()

报错:TypeError: can't concat str to bytes

这是因为:

(1)log.write需要写入bytes对象,encode返回的是bytes型的数据,不可以和str相加,将‘\n’前加b

(2)terminal.write函数参数需要为str类型,转化为str

numpy, argsort逆序

a=np.arange(10)
a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a[0]=11
a
array([11,  1,  2,  3,  4,  5,  6,  7,  8,  9])
np.argsort(a)
array([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], dtype=int64)

numpy 往array里添加一个元素

首先这里p_arr为一个numpy的array,p_为一个元素

p_arr = np.concatenate((p_arr,[p_])) # 先将p_变成list形式进行拼接,注意输入为一个tuple
p_arr = np.append(p_arr,p_) #直接向p_arr里添加p_
# 注意一定不要忘记用赋值覆盖原p_arr不然不会变
# 但是,仍然建议用list子代append。因为numpy的append默认添加的值全转化为float64了。

python-文件备份/拷贝

shutil.copy(sourceDir, targetDir)

os.path.join():路径拼接

networkx 读取txt或gml中的复杂网络数据

import networkx as nx
#抽取txt中的数据
def read_txt(data):
    g = nx.read_edgelist("data", create_using=nx.DiGraph())
    print(g.edges())
 
#抽取gml中的数据
#networkx可以直接通过函数从gml文件中读出数据
def read_gml(data):
    H=nx.read_gml(data)
    print(H.edges())
 
read_txt('D:\\Artifical\\平均度4\\SF2-4.txt')
print('---------------gml------------------')
read_gml('D:\\文档\\论文\\代码\\社区发现\\数据\\data\\adjnoun\\adjnoun.gml')

--------------------- 
原文:https://blog.csdn.net/qq_38266635/article/details/81743336 

 

判断无向图连通性

while len(list(nx.dfs_edges(G)))!=G.number_of_nodes()-1:
    G = RG(100, e)
    print("not connected!")

networkx取邻接矩阵

def get_adj_matrix(G):
    return nx.adjacency_matrix(G).todense()

todense()与toarray()

todense()返回一个矩阵,toarray()返回一个numpy数组。

np.random.choice

1、以p的概率,在a中取size个数,p值越大越可能被取到;2、当replace=True时,取值可重复

import numpy as np
a1=np.array([3,5,2.6,41.2,5.7])
a2 = np.random.choice(a=a1, size=3, replace=False, p=[0.2, 0.1, 0.3, 0.4, 0.0])
print(a2)
输出: array([41.2,  5. ,  2.6])

random.sample(list, n),从列表中取n个样本

注意sample是属于random模块,而不是nump.random模块,二者不一样。

注意n必须是整数,返回一个列表。

  关于二维数组求和的几种方法

   a = [[1,2],[3,4],[5,6]]

   1.sum(map(sum,a)) #first, map(func,a) 函数是对a中的每一个元素进行sum操作

  解释一下map函数, map(fund, a)   equals   [func(i) for i in a]  and return a list

   2.sum(sum(i) for i in a) #second one

   3.sum(sum(a[i]) for i in range(len(a))) #third one

   4.reduce(lambda x,y:x+y , reduce(lambda x,y:x+y, a))
--------------------- 
作者:jinmingz 
来源:CSDN 
原文:https://blog.csdn.net/zjm750617105/article/details/51173032 
版权声明:本文为博主原创文章,转载请附上博文链接!

reshape 与 .resize

  • reshape:有返回值,所谓有返回值,即不对原始多维数组进行修改;
  • resize:无返回值,所谓有返回值,即会对原始多维数组进行修改;
  • 但是,numpy.resize(a, size)不会对原数组进行修改。
>> X = np.random.randn(2, 3)
>> X
array([[ 1.23077478, -0.70550605, -0.37017735],
       [-0.61543319,  1.1188644 , -1.05797142]])

>> X.reshape((3, 2))
array([[ 1.23077478, -0.70550605],
       [-0.37017735, -0.61543319],
       [ 1.1188644 , -1.05797142]])

>> X
array([[ 1.23077478, -0.70550605, -0.37017735],
       [-0.61543319,  1.1188644 , -1.05797142]])

>> X.resize((3, 2))
>> X
array([[ 1.23077478, -0.70550605],
       [-0.37017735, -0.61543319],
       [ 1.1188644 , -1.05797142]])

来自:https://blog.csdn.net/lanchunhui/article/details/51258503?utm_source=copy

  • numpy.reshape

(1)通过reshape生成的新数组和原始数组公用一个内存,也就是说,假如更改一个数组的元素,另一个数组也将发生改变。

(2)reshape只能作用于能规整划分的数组。

>>> z = np.array([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]])

>>> print(z)
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]
 [13 14 15 16]]
>>> print(z.shape)
(4, 4)
>>> print(z.reshape(-1))
[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16]
>>> print(z.reshape(-1,1))  #我们不知道z的shape属性是多少,
                            #但是想让z变成只有一列,行数不知道多少,
                            #通过`z.reshape(-1,1)`,Numpy自动计算出有16行,
                            #新的数组shape属性为(16, 1),与原来的(4, 4)配套。
[[ 1]
 [ 2]
 [ 3]
 [ 4]
 [ 5]
 [ 6]
 [ 7]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值