NumPy通用函数、利用NumPy数组进行数据处理

通用函数(ufunc)是一种针对ndarray中的数据执行元素级运算的函数。

注意:函数返回的是一个新的数组

在一般函数中接收数组参数的函数称为单变量一般函数。

[En]

A function that receives an array parameter in a general function is called a univariate general function.

同样,接受两个数组参数的二进制通用函数称为二进制通用函数。

[En]

By the same token, a binary general function that accepts two array parameters is called a binary general function.

(这是一元函数,而且大部分是比较好理解的函数,就不再多写例子了)

函数描述abs计算整数、浮点数或复数的绝对值sqrt计算各元素的平方根square计算各元素的平方exp计算各元素的指数exlog、log10、log2、log1p分别对自然对数(底数为e)、底数为10的log、底数为2的log、log(1+x)sign计算元素的正负号:1(正数)、0(零)、-1(负数)ceil计算个元素的ceiling值,及大于或者等于改制的最小整数floor计算元素的floor值,及小于等于该值的最大整数rint将各元素四舍五入到最接近的整数modf将数组的小数和整数部分以两个独立数组的形式返回isnan返回一个表示”哪些值是NaN”的布尔型数组isfinite、isinf分别返回表示”哪些元素是有穷的”或”哪些元素是无穷的”的布尔型数组sin、sinh、cos、cosh、tan、tanh普通型和双曲型三角函数arcos、arccosh、arcsin反三角函数

这里我们只拿两个比较有意思的来演示一下(地板,天花板函数):

import numpy as np
ret = np.array([1.57])
print(np.ceil(ret))
print(np.floor(ret))

函数描述add将数组中对应的元素相加subtract从第一个数组中减去第二个数组中的元素multiply数组元素相乘divide,floor_divide除法或向下整除法(舍去余数)maximum、fmax元素级的最大值计算minimum、fmin元素级的最小值计算mod元素级的求模计算copysign将第二个数组中的值的符号赋值给第一个数组中的值greater、greater_equal、less、less_equal、equal、not_equal、logical_and、logical_or、logical_xor执行元素级的比较运算,最终产生布尔型数组,相当于运算符>、≥、<、≤、==、!=

1、将条件逻辑转为数组运算

NumPy的where()函数是三元表达式 x if condition else y的矢量化版本。

import numpy as np
arr_x = np.array([1, 5, 7])
arr_y = np.array([2, 6, 8])
arr_con = np.array([True, False, True])
result = np.where(arr_con, arr_x, arr_y)
print(result)
result2 = np.where(arr_x > 3, 1, 0)
print(result2)

2、数组统计运算

Numpy数组中与统计运算相关的方法

函数描述sum对数组中全部或某个轴向的元素求和mean算术平均值min计算数组中的最小值max计算数组中的最大值argmin表示最小索引值argmax表示最大索引值cumsum所有元素的累计和cumprod所有元素的累计积1.通过NumPy库中的相关方法,我们可以很方便地运用Python进行数组的统计汇总

import numpy as np
arr_x = np.array([1, 4, 5])
print(np.sum(arr_x))
print(np.mean(arr_x))
print(np.argmax(arr_x))
print(np.cumsum(arr_x))
import numpy as np
arr = np.arange(10)
arr = arr.reshape((2, 5))
print(arr)
print(arr.sum(axis=0))
print(arr.sum(axis=1))

2.sun()

sum(a)默认为对输入参数中的所有元素进行求和

import numpy as np
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
print(arr)
print(np.sum(arr))
b = np.arange(12).reshape(2, 6)
print(b)
print(np.sum(b))

sum()输入参数带有axis时,将按照指定axis进行对应求和

import numpy as np
b = np.arange(12).reshape(2, 6)
print(b)
print(np.sum(b))
print(np.sum(b, axis=0))
print(np.sum(b, axis=1))

sum()输入参数axis为多个轴时,则依次按要求在axis上进行多次求和

`python
import numpy as np
a = np.arange(12).reshape(2, 2, 3)
print(a)
print(np.sum(a, axis=(0, 1)))
print(np.sum(a, axis=(1, 2)))
print(np.sum(a, axis=(0, 1, 2)))

3.cumsum()

一个维度,它是当前列之前并添加到当前列的总和

[En]

One dimension, which is the sum before the current column and added to the current column

import numpy as np
a = np.array([1, 2, 3, 4, 5, 6, 7])
print(np.cumsum(a))

二维,axis=0(第一行不动,将第一行累加到其他行);axis=1(进入最内层,转化成列处理。第一列不动,将第一列累加到其他列)

import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(np.cumsum(a, axis=0))
print(np.cumsum(a, axis=1))

三维,axis=0(第一行不动,将第一行累加到其他行);axis=1(进入第二层,每个第二层第一行不动,累加到其他行);axis=2(进入最内层,转化成列处理,第一列不动,将其累加到其他列)

import numpy as np
a = np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 20, 30]]])
print(np.cumsum(a, axis=0))

print(np.cumsum(a, axis=1))
print(np.cumsum(a, axis=2))

3、数组排序(sort()方法没有返回值)

1.如果希望对NumPy数组中的元素进行排序,可以通过sort()方法实现(默认通过最后一个轴排序)

import numpy as np
arr = np.array([[6, 2, 7], [3, 6, 2], [4, 3, 2]])
q = np.sort(arr)
print(q)

2.如果希望对任何一个轴上的元素进行排序,则需要将轴的编号作为sort()方法的参数传入

import numpy as np
arr = np.array([[6, 2, 7], [3, 6, 2], [4, 3, 2]])
q = np.sort(arr, 0)
print(q)

4、检索数组元素

1.all()函数用于判断整个数组中的元素的值是否全部满足条件,如果满足条件返回True,否则返回False

import numpy as np
arr = np.array([[1, -2, -7], [-3, 6, 2], [-4, 3, 2]])
q = np.all(arr>0)
print(q)

2.any()函数用于判断整个数组中的元素至少有一个满足条件就返回True,否则就返回False

import numpy as np
arr = np.array([[1, -2, -7], [-3, 6, 2], [-4, 3, 2]])
q = np.any(arr>0)
print(q)

5、唯一化及其他集合逻辑

1.针对一维数组,NumPy提供了unique()函数来找出数组中的唯一值,并返回排序后的结果

import numpy as np
arr = np.array([12, 11, 34, 23, 12, 8, 11])
print(np.unique(arr))

2.in1d()函数用于判断数组中的元素是否在另一个数组中存在,该函数返回的是一个布尔型的数组

import numpy as np
arr = np.array([12, 11, 34, 23, 12, 8, 11])
print(np.in1d(arr, [11, 12]))

3.NumPy提供的有关集合的函数还有很多,常见的函数如下表所示:

函数描述unique(x)计算x中的唯一元素,并返回有序结果intersect1d(x,y)计算x中的公共元素,并返回有序结果union1d(x,y)计算x中的并集,并返回有序结果in1d(x,y)得到一个表示”x”的元素是否包含”y”的布尔型数组setdiff1d(x,y)集合的差,即元素在x中且不在y中setxor1d(x,y)集合的对称差,及存在于一个数组中但不同时存在于两个数组中的元素

Original: https://blog.csdn.net/zhangmaoyang66/article/details/123975071
Author: 只会偷懒
Title: NumPy通用函数、利用NumPy数组进行数据处理



相关阅读

Title: Python权限管理框架Casbin PyCasbin的简单操作

Casbin 简介

Casbin 是一个强大和高效的开放源码访问控制库,它支持各种 访问控制模型 以强制全面执行授权。

大多数应用都会和权限与权限管理打交道,有的时候我们希望有一套拿来即用的权限管理框架,既可以在小型的个人应用中使用,又可以应付大型应用的复杂权限的管理,Casbin可以满足你的这个小小愿望.Casbin支持多种编程语言,今天我们来试试Casbin在python下的简单操作.

pip install casbin

除了安装支持的casein库,我们还需要两个配置文件, model.confpolicy.csv。 其中, model.conf 存储了我们的访问模型, 而 policy.csv 存储的是我们具体的用户权限配置。

test.py

import casbin
import os

model_dir = os.path.join(os.path.dirname(__file__), 'model.conf')
policy_dir = os.path.join(os.path.dirname(__file__), 'policy.csv')

e = casbin.Enforcer(model_dir,policy_dir)

model.conf文件里是一个ACL (Access Control List, 访问控制列表)的配置文件

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act

policy.csv文件载入一些策略

p, alice, data1, read
p, bob, data2, write

test.py文件后边我们将进行一些关于权限的测试,下边是整个文件的代码.

import casbin
import os

model_dir = os.path.join(os.path.dirname(__file__), 'model.conf')
policy_dir = os.path.join(os.path.dirname(__file__), 'policy.csv')

e = casbin.Enforcer(model_dir,policy_dir)
sub = "alice"
obj = "data1"
act = "read"

def getEnforce(sub, obj, act):
"""
    执行器的封装
"""
    if e.enforce(sub, obj, act):

        return True
    else:

        return False

if __name__ == '__main__':
    print(getEnforce(sub,obj,act))

运行程序后会输出一个 True,上边的代码我觉得不用过多的解释,看注释基本就可以明白运行的原理了.

在数据库里存放策略

将策略存放在数据库里,这样更接近实际的操作,这里我们使用 casbin_sqlalchemy_adapter这个库,它封装好了很多有关casein数据库的操作的方法,可以拿来直接使用.

pip install casbin_sqlalchemy_adapter

然后我们吧 policy_dir更换为数据库里的一个表.更改test.py文件的前半部分:


model_dir = os.path.join(os.path.dirname(__file__), 'model.conf')

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DB_DIR = os.path.join(BASE_DIR, 'test.db')

SQLALCHEMY_DATABASE_URL = "sqlite:///" + DB_DIR

adapter = casbin_sqlalchemy_adapter.Adapter(SQLALCHEMY_DATABASE_URL)
e = casbin.Enforcer(model_dir, adapter)
e.add_policy(["alice", "data1", "read"])

这里我们注释掉了 policy.csv文件的磁盘上的地址,跟换为数据库,当运行程序的时候,会创建一个数据库和一个表 casbin_rule,其中 casbin_rule存放的数据和 policy.csv是一样的,我们可以通过 e.add_policy()来添加策略,也可以批量添加,或是更新删除策略.

修改完代码后,运行程序,会发现和之前使用.csv文件是一样,是不是很方便,Casbin可以创建很多种权限控制模式,例如rbac等,网上介绍使用的教程很少,不过我个人感觉这个框架还是很不错的,用起来也方便,省去很多麻烦.

Original: https://blog.csdn.net/bosivip/article/details/127558721
Author: J_Sky2022
Title: Python权限管理框架Casbin PyCasbin的简单操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/321113/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总