python基础12:python矢量运算map函数和numpy矢量运算函数(np.vectorize(fun)(A, B) 和np.frompyfunc(chu,2,1)(a, b))

NOTE:
1)numpy中几乎所有的算术和关系运算符都被numpy借助ufunc实现为可对数组
操作的矢量化运算符.如np.array, np.mat都可以自动进行矢量化运算

2)对list等不能直接进行矢量化运算的数据类型而言,可采用numpy的矢量化函数
list的两种矢量化运算函数:

  • (1) np.vectorize(chu)(a, b)
  • (2) np.frompyfunc(chu,2,1)(a, b)

3)python内置的高阶函数map

def f1(x):
    return x + 3

x = 1
y = f1(1)

X = [1 ,2, 3]
Y = list(map(f1, X))        # 矢量运算
Y1 = list(map(lambda x:x+3, X))
print(y, Y, Y1, sep='\n')
#4
#[4, 5, 6]
#[4, 5, 6]

1和2的代码:

# -*- coding: utf-8 -*-
"""
Created on Thu Jul 26 10:28:56 2018

@author: Administrator
"""
'''
1)numpy中几乎所有的算术和关系运算符都被numpy借助ufunc实现为可对数组
操作的矢量化运算符.如np.array, np.mat都可以自动进行矢量化运算
2)对list等不能直接进行矢量化运算的数据类型而言,可采用numpy的矢量化函数
    list的两种矢量化运算函数:
    (1) np.vectorize(chu)(a, b)
    (2) np.frompyfunc(chu,2,1)(a, b)
'''

import numpy as np

def fun(a, b):                      # 标量函数
    return a + b, a - b, a * b

A = np.array([3, 4, 7])
B = np.array([100, 200, 300])
c = fun(A,B)
C = np.vectorize(fun)(A, B)         # 矢量函数
#print(c)
print(C)

D = np.frompyfunc(fun, 2, 3)(A, B)
print(D)
print('------------------')
def foo(a):
    def bar(b):
        return a + b, a - b, a * b
    return np.frompyfunc(bar, 1, 3)
E = foo(100)(A)
F = foo(B)(A)
print(E)
print(F)

# numpy.array数组矢量化运算
print(A / B)
print('********************')

# 列表的矢量化运算:list本质上只能进行标量运算
# 不过可以借助numpy.frompyfunc(f,m,n)(x1,..,xm) 实现list的矢量运算
a = A.tolist()
b = B.tolist()
'''
print(a/b): unsupported operand type(s) for /: 'list' and 'list'
list a 和 list b不能直接进行矢量化运算
'''
def chu(x, y):
    return x / y
# list的两种矢量化运算函数:
print(np.vectorize(chu)(a, b))
print(np.frompyfunc(chu,2,1)(a, b))

猜你喜欢

转载自blog.csdn.net/weixin_40040404/article/details/81226768