Numpy

Numpy基础二

2019-01-20  本文已影响3人  __豆约翰__

1通用函数

通用函数(即ufunc)是一种对ndarray中的数据执行元素级的运算。我们可以将其看做是简单的函数(接收一个或多个参数,返回一个或者多个返回值).

常用一元ufunc:

函数 说明
abs 计算整数、浮点数的绝对值。
aqrt 计算各元素的平方根。相当于arr ** 0.5
square 计算各元素的平方。相当于arr ** 2
sign 计算各元素的正负号,1(正数)、0(零)、-1(负数)
ceil 计算各元素的celling值,即大于该值的最小整数。
floor 计算各元素的floor值,即小于等于该值的最大整数。
rint 将各元素值四舍五入到最近的整数,保留dtype
modf 将数组的小数和整数部分以两个独立数组的形式返回
isnan 返回一个表示“那些是NaN(这不是一个数字)”的布尔类型数组.
常用二元ufunc:

函数 说明
add 将数组中对应的元素相加.
subtract 从第一个数组中减去第二个数组中的元素.
multiply 数组元素相乘
divide、floor_divide 除法、向下整除法(丢弃余数)
power 对第一个数组中的元素A,根据第二数组中的相应元素B,计算A的B次方。
maximum、fmax 元素级的最大值计算。fmax将忽略NaN
minimum、fmin 元素级的最小值计算。fmin将忽略NaN
mod 元素级的求模计算.
copysign 将第二个数组中的值的符号复制给第一个数组中的值.
greater、greater_equal 执行元素级的运算比较,最终产生布尔类型数组。

示例代码:

下面列举一些常用组函数使用案例
import numpy as np

ndarray1 = np.array([3.5, 1.7, 2.2, -7.8, np.nan, 4.6, -3.4])
ndarray1
array([ 3.5, 1.7, 2.2, -7.8, nan, 4.6, -3.4])

abs 计算整数、浮点数的绝对值。

np.abs(ndarray1)
array([ 3.5, 1.7, 2.2, 7.8, nan, 4.6, 3.4])

aqrt 计算各元素的平方根。相当于arr ** 0.5

np.square(ndarray1)
array([ 12.25, 2.89, 4.84, 60.84, nan, 21.16, 11.56])

sign 计算各元素的正负号,1(正数)、0(零)、-1(负数)

np.sign(ndarray1)
array([ 1., 1., 1., -1., nan, 1., -1.])

ceil 计算各元素的celling值,即大于该值的最小整数。

np.ceil(ndarray1)
array([ 4., 2., 3., -7., nan, 5., -3.])

floor 计算各元素的floor值,即小于等于该值的最大整数。

np.floor(ndarray1)
array([ 3., 1., 2., -8., nan, 4., -4.])

rint 将各元素值四舍五入到最近的整数,保留dtype

np.rint(ndarray1)
array([ 4., 2., 2., -8., nan, 5., -3.])

isnan 返回一个表示“那些是NaN(这不是一个数字)”的布尔类型数组.

np.isnan(ndarray1)
array([False, False, False, False, True, False, False], dtype=bool)

二元运算符

ndarray2 = np.random.randint(1, 20, (4, 5))
ndarray3 = np.random.randint(-10, 10, (4, 5))
ndarray3 = np.where(ndarray3 == 0, 1, ndarray3)
ndarray2
array([[ 8, 13, 18, 12, 11],
[11, 19, 14, 8, 14],
[ 8, 6, 19, 19, 16],
[14, 7, 6, 6, 2]])
ndarray3
array([[ 1, 7, -10, -6, 5],
[ -5, 2, -1, 2, 5],
[ 5, 4, -1, 1, -1],
[ -1, -4, 1, 3, 3]])

add 将数组中对应的元素相加.

np.add(ndarray2, ndarray3)
array([[ 9, 20, 8, 6, 16],
[ 6, 21, 13, 10, 19],
[13, 10, 18, 20, 15],
[13, 3, 7, 9, 5]])

subtract 从第一个数组中减去第二个数组中的元素.

np.subtract(ndarray2, ndarray3)
array([[ 7, 6, 28, 18, 6],
[16, 17, 15, 6, 9],
[ 3, 2, 20, 18, 17],
[15, 11, 5, 3, -1]])

maximum、fmax 从两个数组中取出最大值。fmax将忽略NaN

np.maximum(ndarray2, ndarray3)
array([[ 8, 13, 18, 12, 11],
[11, 19, 14, 8, 14],
[ 8, 6, 19, 19, 16],
[14, 7, 6, 6, 3]])

mod 元素级的求模计算.

np.mod(ndarray2, ndarray3)
array([[ 0, 6, -2, 0, 1],
[-4, 1, 0, 0, 4],
[ 3, 2, 0, 0, 0],
[ 0, -1, 0, 0, 2]])

copysign 将第二个数组中的值的符号复制给第一个数组中的值.

np.copysign(ndarray2, ndarray3)
array([[ 8., 13., -18., -12., 11.],
[-11., 19., -14., 8., 14.],
[ 8., 6., -19., 19., -16.],
[-14., -7., 6., 6., 2.]])

greater、greater_equal 执行元素级的运算比较,最终产生布尔类型数组。

np.greater(ndarray2, ndarray3)
array([[ True, True, True, True, True],
[ True, True, True, True, True],
[ True, True, True, True, True],
[ True, True, True, True, False]], dtype=bool)

2 数组统计函数

可以通过数组上的一组数学函数对整个数组或某些数据进行统计计算。 基本的数组统计方法:

方法 说明
mean 算数平均数。零长度的数组的mean为NaN.
sum 所有元素的和.
max、min 所有元素的最大值,所有元素的最小值
std、var 所有元素的标准差,所有元素的方差
argmax、argmin 最大值的下标索引值,最小值的下标索引值
cumsum、cumprod 所有元素的累计和、所有元素的累计积
多维数组默认统计全部维度,axis参数可以按指定轴心统计,值为0则按列统计,值为1则按行统计。

示例代码:
import numpy as np

ndarray1 = np.random.randint(1, 10, (4, 5))
ndarray1
array([[6, 2, 8, 5, 9],
[1, 3, 7, 7, 7],
[3, 8, 7, 3, 7],
[4, 7, 5, 7, 3]])

  1. sum求元素和
    0-列 1-行

sum-计算所有元素和

np.sum(ndarray1)
109

sum-计算每一列的元素和

np.sum(ndarray1, axis=0)
array([14, 20, 27, 22, 26])

sum-计算每一行的元素和

np.sum(ndarray1, axis=1)
array([30, 25, 28, 26])

  1. argmax求最大值索引

argmax-默认情况下按照一维数组索引

np.argmax(ndarray1)
4

argmax-统计每一列最大

np.argmax(ndarray1, axis=0)
array([0, 2, 0, 1, 0])

argmax-统计每一行最大

np.argmax(ndarray1, axis=1)
array([4, 2, 1, 1])

  1. mean求平均数

mean-求所有元素的平均值

np.mean(ndarray1)
5.4500000000000002

mean-求每一列元素的平均值

np.mean(ndarray1, axis=0)
array([ 3.5 , 5. , 6.75, 5.5 , 6.5 ])

mean-求每一行元素的平均值

np.mean(ndarray1, axis=1)
array([ 6. , 5. , 5.6, 5.2])

  1. cumsum求元素累计和

cumsum-前面元素的累计和

np.cumsum(ndarray1)
array([ 6, 8, 16, 21, 30, 31, 34, 41, 48, 55, 58, 66, 73,
76, 83, 87, 94, 99, 106, 109])

cumsum-每一列元素的累计和

np.cumsum(ndarray1, axis=0)
array([[ 6, 2, 8, 5, 9],
[ 7, 5, 15, 12, 16],
[10, 13, 22, 15, 23],
[14, 20, 27, 22, 26]])

cumsum-每一行元素的累计和

np.cumsum(ndarray1, axis=1)
array([[ 6, 8, 16, 21, 30],
[ 1, 4, 11, 18, 25],
[ 3, 11, 18, 21, 28],
[ 4, 11, 16, 23, 26]])

3 all和any函数

import numpy as np

# 判断两个数组元素是否相等
ndarray1 = np.arange(6).reshape((2, 3))
ndarray2 = np.arange(6).reshape((2, 3))
ndarray3 = np.array([[ 0,  1,  2], [ 8,  9, 10]])

(ndarray1 == ndarray2).all()
#    True

(ndarray1 == ndarray3).all()
#    False

(ndarray1 == ndarray3).any()
#    True

4 添加和删除函数

方法 描述
delete Return a new array with sub-arrays along an axis deleted.
insert(arr, obj, values[, axis]) Insert values along the given axis.
append(arr, values[, axis]) Append values to the end of an array.
resize(a, new_shape) Return a new array with the specified shape.
concatenate((a1,a2,...), axis=0) Join a sequence of arrays along an existing axis.
reshape:有返回值,即不对原始多维数组进行修改; resize:无返回值,即会对原始多维数组进行修改;

示例代码:
import numpy as np

ndarray1 = np.arange(4)
ndarray2 = np.arange(4)
ndarray3 = np.arange(12).reshape((3, 4))

  1. append数组中追加元素

数组追加一个数值元素

print(ndarray1)
np.append(ndarray1, 100)
[0 1 2 3]
array([ 0, 1, 2, 3, 100])

在一维数组后追加一维数组

print(ndarray2)
np.append(ndarray1, ndarray2)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
array([ 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

在二维数组后追加标量元素

print(ndarray3)
np.append(ndarray3, 100)
[3 4 5]
array([ 3, 4, 5, 100])

append总是返回一维数组

np.append(ndarray1, ndarray3)
array([0, 1, 2, 3, 3, 4, 5])

  1. concatenate合并两个数组元素
    ndarray4 = np.arange(12).reshape((3, 4))
    ndarray4
    array([[ 0, 1, 2, 3],
    [ 4, 5, 6, 7],
    [ 8, 9, 10, 11]])

合并两个一维数组

np.concatenate((ndarray1, ndarray2))
array([0, 1, 2, 3, 0, 1, 2, 3])

合并两个二维数组

np.concatenate((ndarray3, ndarray4), axis=0)
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])

合并两个二维数组

np.concatenate((ndarray3, ndarray4), axis=1)
array([[ 0, 1, 2, 3, 0, 1, 2, 3],
[ 4, 5, 6, 7, 4, 5, 6, 7],
[ 8, 9, 10, 11, 8, 9, 10, 11]])

  1. delete删除一行或者一列数组元素
    ndarray5 = np.arange(20).reshape((4, 5))
    ndarray5
    array([[ 0, 1, 2, 3, 4],
    [ 5, 6, 7, 8, 9],
    [10, 11, 12, 13, 14],
    [15, 16, 17, 18, 19]])

删除第0行元素

np.delete(ndarray5, 0, axis=0)
array([[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])

删除第2列元素

np.delete(ndarray5, 1, axis=1)
array([[ 0, 2, 3, 4],
[ 5, 7, 8, 9],
[10, 12, 13, 14],
[15, 17, 18, 19]])

删除第0、2、3列元素

np.delete(ndarray5, [0, 2, 3], axis=1)
array([[ 1, 4],
[ 6, 9],
[11, 14],
[16, 19]])

使用np.s_[::]创建切片对象

删除从1、2列元素

np.delete(ndarray5, np.s_[1:3], axis=1)
array([[ 0, 3, 4],
[ 5, 8, 9],
[10, 13, 14],
[15, 18, 19]])

  1. insert插入元素

在第2个位置插入元素100

ndarray6 = np.arange(4)
print(ndarray6)
np.insert(ndarray6, 1, 100)
[0 1 2 3]
array([ 0, 100, 1, 2, 3])

在第3个位置插入两个元素10、20

np.insert(ndarray6, 2, [10, 20])
array([ 0, 1, 10, 20, 2, 3])

在第2行插入一行元素

np.insert(ndarray6, 1, np.array([100, 200, 300, 400]), axis=0)
array([ 0, 100, 200, 300, 400, 1, 2, 3])

在第3列插入一列元素

ndarray7 = np.arange(12).reshape((3, 4))
np.insert(ndarray7, 2, np.array([100, 200, 300]), axis=1)
array([[ 0, 1, 100, 2, 3],
[ 4, 5, 200, 6, 7],
[ 8, 9, 300, 10, 11]])

上一篇下一篇

猜你喜欢

热点阅读