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))