ufunc 对象

Numpy 有两种基本对象:ndarray (N-dimensional array object) 和 ufunc (universal function object)ndarray 是存储单一数据类型的多维数组,而 ufunc 则是能够对数组进行处理的函数。

例如,我们之前所接触到的二元操作符对应的 Numpy 函数,如 add,就是一种 ufunc 对象,它可以作用于数组的每个元素。

import numpy as np
a = np.array([0,1,2])
b = np.array([2,3,4])

np.add(a, b)
输出结果:array([2, 4, 6])

dir(np.add)
['__call__',
 '__class__',
 '__delattr__',
 '__doc__',
 '__format__',
 '__getattribute__',
 '__hash__',
 '__init__',
 '__name__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 'accumulate',
 'at',
 'identity',
 'nargs',
 'nin',
 'nout',
 'ntypes',
 'outer',
 'reduce',
 'reduceat',
 'signature',
 'types']

除此之外,大部分能够作用于数组的数学函数如三角函数等,都是 ufunc 对象。

特别地,对于二元操作符所对应的 ufunc 对象,支持以下方法:

reduce 方法

op.reduce(a)

op沿着某个轴应用,使得数组 a 的维数降低一维。

add 作用到一维数组上相当于求和:

y=add.recuce(a)=a[0]+a[1]+...+a[N1]=n=0N1a[n]

a = np.array([1,2,3,4])

np.add.reduce(a)
输出结果:10
多维数组默认只按照第一维进行运算:
a = np.array([[1,2,3],[4,5,6]])

np.add.reduce(a)
输出结果:  array([5, 7, 9])
指定维度:
np.add.reduce(a, 1)
输出结果:array([ 6, 15])
作用于字符串:

a = np.array(['ab', 'cd', 'ef'], np.object)

np.add.reduce(a)
输出结果:    'abcdef'
逻辑运算:
a = np.array([1,1,0,1])

np.logical_and.reduce(a)
np.logical_or.reduce(a)
输出结果:False   True

a = np.array([1,2,3,4])

np.add.accumulate(a)
输出结果:     array([ 1, 3, 6, 10])

a = np.array(['ab', 'cd', 'ef'], np.object)

np.add.accumulate(a)
输出结果:    array(['ab', 'abcd', 'abcdef'], dtype=object)


a = np.array([0, 10, 20, 30, 40, 50])
indices = np.array([1,4])

np.add.reduceat(a, indices)
输出结果:   array([60, 90])
这里,indices 为 [1, 4],所以 60 表示从下标1(包括)加到下标4(不包括)的结果,90 表示从下标4(包括)加到结尾的结果。

outer 方法

op.outer(a, b)

对于 a 中每个元素,将 op 运用到它和 b 的每一个元素上所得到的结果:


a = np.array([0,1])
b = np.array([1,2,3])

np.add.outer(a, b)
#注意顺序
np.add.outer(b, a)
输出结果:

array([[1, 2, 3],
       [2, 3, 4]])
array([[1, 2],
       [2, 3],
       [3, 4]])




任务描述 本关任务:根据任务要求使用 Numpy 库自带的通用函数对数组进行计算。 相关知识 NumPy 中的 ufunc 对象也称为 ufunc 函数,它包含了对数组进行处理的通用函数。通用函数(ufunc)是针对 ndarray 数组对象执行元素级运算的函数,即通用函数会对数组中的每一个元素值作用后产生新的元素值,并返回新的元素值组成的数组,因此,通用函数(ufunc)都是以 NumPy 数组作为输出的。 通用函数(ufunc)的分类: 按照通用函数(ufunc)所接收的数组参数个数来划分,接收一个数组参数的称为一元通用函数,而接收两个数组参数的称为二元通用函数; 按照通用函数(ufunc)的运算功能划分,常用的通用函数(ufunc)运算有四则运算、比较运算和逻辑运算等。通用函数(ufunc)支持全部的四则运算,并且保留习惯的运算符,与数值运算使用方法相同,但要注意操作的对象是数组。编程实例 以如下 NumPy 数组 A 为例,使用 ufuncs 函数对数组 A 进行计算: A = np.random.randint(0, 10, (5, 6)) # 随机初始化一个5行6列的整数矩阵A ''' A = array([[7, 2, 6, 8, 8, 8], [5, 7, 2, 5, 6, 7], [9, 2, 8, 0, 7, 9], [6, 0, 6, 1, 9, 1], [4, 2, 6, 7, 6, 2]]) ''' 对数组 A 的元素开根号: B = np.sqrt(A) ''' B = array([[2.64575131, 1.41421356, 2.44948974, 2.82842712, 2.82842712, 2.82842712], [2.23606798, 2.64575131, 1.41421356, 2.23606798, 2.44948974, 2.64575131], [3. , 1.41421356, 2.82842712, 0. , 2.64575131, 3. ], [2.44948974, 0. , 2.44948974, 1. , 3. , 1. ], [2. , 1.41421356, 2.44948974, 2.64575131, 2.44948974, 1.41421356]]) ''' 将数组 A 的平方根乘浮点数分解成整数和小数部分: B, C = np.modf(np.sqrt(A)) ''' B = array([[0.64575131, 0.41421356, 0.44948974, 0.82842712, 0.82842712, 0.82842712], [0.23606798, 0.64575131, 0.41421356, 0.23606798, 0.44948974, 0.64575131], [0. , 0.41421356, 0.82842712, 0. , 0.64575131, 0. ], [0.44948974, 0. , 0.44948974, 0. , 0. , 0. ], [0. , 0.41421356, 0.44948974, 0.64575131, 0.44948974, 0.41421356]]), C = array([[2., 1., 2., 2., 2., 2.], [2., 2., 1., 2., 2., 2.], [3., 1., 2., 0., 2., 3.], [2., 0., 2., 1., 3., 1.], [2., 1., 2., 2., 2., 1.]]) ''' 将数组 A 与标量 2 相加: B = np.add(A,2) ''' B = array([[ 9, 4, 8, 10, 10, 10], [ 7, 9, 4, 7, 8, 9], [11, 4, 10, 2, 9, 11], [ 8, 2, 8, 3, 11, 3], [ 6, 4, 8, 9, 8, 4]]) ''' 编程要求 根据任务提示,在右侧编辑器 Begin-End 部分补充代码。 任务要求: 计算矩阵 A 的平方根并与标量 2 相加; 将矩阵 A 开根号后的小数部分与原矩阵 A 相加; 使用通用函数 numpy.dot() 计算矩阵 A 与矩阵 A 转置的矢量积; 测试说明 平台会对你编写的代码进行测试: 测试输入: [[7, 2, 6, 8, 8, 8],[5, 7, 2, 5, 6, 7],[9, 2, 8, 0, 7, 9],[6, 0, 6, 1, 9, 1],[4, 2, 6, 7, 6, 2]] 预期输出: task1输出: [[4.64575131 3.41421356 4.44948974 4.82842712 4.82842712 4.82842712] [4.23606798 4.64575131 3.41421356 4.23606798 4.44948974 4.64575131] [5. 3.41421356 4.82842712 2. 4.64575131 5. ] [4.44948974 2. 4.44948974 3. 5. 3. ] [4. 3.41421356 4.44948974 4.64575131 4.44948974 3.41421356]] task2输出: [[7.64575131 2.41421356 6.44948974 8.82842712 8.82842712 8.82842712] [5.23606798 7.64575131 2.41421356 5.23606798 6.44948974 7.64575131] [9. 2.41421356 8.82842712 0. 7.64575131 9. ] [6.44948974 0. 6.44948974 1. 9. 1. ] [4. 2.41421356 6.44948974 7.64575131 6.44948974 2.41421356]] task3输出: [[281 205 243 166 188] [205 188 180 108 131] [243 180 279 174 148] [166 108 174 155 123] [188 131 148 123 145]]
最新发布
10-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值