元素级数组函数
一元函数
类型 |
说明 |
abs,fabs |
计算整数、浮点数或复数的绝对值。对于非复数值,可以使用更快的fabs。 |
sqrt |
计算各元素的平方根。相当于arr** 0.5 |
sqare |
计算各元素的平方。相当于arr** 2 |
exp |
计算各元素的e^x |
log, log10, log2, log1p |
分别为自然对数、底数为10的log、底数为2的log和log(1 + x)。 |
sign |
计算各元素的正负号:1(正数)、0(零)、-1(负数)。 |
ceil |
计算各元素的ceiling值,即大于等于该值的最小整数。 |
floor |
计算各元素的floor值,即小于等于该值的最小整数。 |
rint |
将各元素值四舍五入到最接近的整数,保留dtype。 |
modf |
将数组的小数部分与整数部分以两个独立数组的形式返还 |
isnan |
返回一个表示“哪些值是NaN(这不是一个数字)”的布尔型数组 |
isfinite,isinf |
分别返回一个表示“哪些元素是有限的(非inf,非NaN)”或“哪些元素是无穷的”的布尔型数组 |
cos,cosh, sin,sinh, tan, tanh |
普通型或双曲型三角函数 |
arccos,arccosh,arcsin,arcsinh, arctan, arctanh |
反三角函数 |
logical_not |
计算各元素not x的真值。相当于~arr。 |
二元函数
类型 |
说明 |
add |
将数组中对应的元素相加 |
subtract |
从第一个数组中减去第二个数组中的元素 |
multiply |
数组元素相乘 |
divide,floor_divide |
除法或向下取整除法 |
power |
对第一个数组中的元素A和第二个数组中对应位置的元素B,计算A^B。 |
maximum,fmax |
元素级的最大值计算。fmax将忽略NaN。 |
minimum,fmin |
元素级的最小值计算。fmin将忽略NaN。 |
mod |
元素级的求模计算 |
copysign |
将第二个数组中的符号复制给第一个数组中的值 |
greater,greater_equal, less,less_equal,equal,not_equal |
执行元素级的比较,最终产生布尔型数组。 |
logical_and,logical_or,logical_xor |
执行元素级的真值逻辑运算,最终产生布尔型数组。 |
元素级数组运算
import numpy as np
arr = np.arange(10)
print(np.sqrt(arr))
[ 0. 1. 1.41421356 1.73205081 2. 2.23606798
2.44948974 2.64575131 2.82842712 3. ]
数组比较的
x = np.random.randn(10)
y = np.random.randn(10)
print(x)
print(y)
print()
print(np.minimum(x,y))
print(np.maximum(x,y)) #进行数组比较,返回数组的最大值和最小值
[ 0.58431639 -0.11893493 0.08852681 1.92119317 -0.48005949 0.23209933
-1.25589148 -0.31364489 0.55336918 -0.3881539 ]
[ 0.47316077 -0.4644584 -0.68992793 0.53095745 0.47049651 -1.05365355
0.82460579 -0.47330585 -0.30023777 -0.06218441]
[ 0.47316077 -0.4644584 -0.68992793 0.53095745 -0.48005949 -1.05365355
-1.25589148 -0.47330585 -0.30023777 -0.3881539 ]
[ 0.58431639 -0.11893493 0.08852681 1.92119317 0.47049651 0.23209933
0.82460579 -0.31364489 0.55336918 -0.06218441]
多返回值的函数
a,b = np.modf(x)
print(a)
print(b)
[ 0.58431639 -0.11893493 0.08852681 0.92119317 -0.48005949 0.23209933
-0.25589148 -0.31364489 0.55336918 -0.3881539 ]
[ 0. -0. 0. 1. -0. 0. -1. -0. 0. -0.]
where 通过真值选择元素
a=zip([1,2,3],[3,4,5],[6,7,8])
print(a) #zip对象
list(a)
<zip object at 0x000002328F7BBFC8>
[(1, 3, 6), (2, 4, 7), (3, 5, 8)]
x_arr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
y_arr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, True, False])
传统做法
result = [(x if c else y)for x,y,c in zip(x_arr,y_arr,cond)]
print(result)
print(np.where(cond,x_arr,y_arr))
[1.1000000000000001, 2.2000000000000002, 1.3, 1.3999999999999999, 2.5]
[ 1.1 2.2 1.3 1.4 2.5]
where 对数据的操作
arr = np.arange(10)*10
print(np.where(arr>5,6,arr))
print(np.where(arr>5,1,0))
[0 6 6 6 6 6 6 6 6 6]
[0 1 1 1 1 1 1 1 1 1]
where的一个嵌套
cond_1 = np.array([True, False, True, True, False])
cond_2 = np.array([False, True, False, True, False])
#结果返回真值表,如果都为真 返回0 如果cond_1 = True返回1,cond_2=True返回2 否则返回3
#传统方法
result=[]
for i in range(len(cond_1)):
if cond_1[i] and cond_2[i]:
result.append(0)
elif cond_1[i]:
result.append(1)
elif cond_2[i]:
result.append(2)
else:
result.append(3)
print(result)
[1, 2, 1, 0, 3]
#where的做法
result = np.where(cond_1 &cond_2,0,np.where(
cond_1,1,np.where(cond_2,2,3)))
print(result)
[1 2 1 0 3]