Python数据分析numpy入门

Posted Geek_bao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python数据分析numpy入门相关的知识,希望对你有一定的参考价值。

一、numpy简易入门

1.1 认识numpy数组对象

import numpy as np  # 导入numpy工具包
data = np.arange(12).reshape(3, 4) # 创建一个34列的数组
print(data)          # 输出数组
print(type(data))    # 输出数据类型
print(data.ndim)     # 数组维度的个数,输出结果为2表示二维数组
print(data.shape)    # 输出数组维度,输出(3,4)表示三行四列
print(data.size)     # 数组元素的个数,输出结果为12,表示总共有12个元素
print(data.dtype)    # 数组元素的类型,输出结果int32,表示元素类型都是int32

输出结果如下:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
<class 'numpy.ndarray'>
2
(3, 4)
12
int32

Process finished with exit code 0

1.2 创建numpy数组

import numpy as np  # 导入numpy工具包
data1 = np.array([1, 2, 3])    # 创建一个一维数组
print(data1)

data2 = np.array([[1, 2, 3], [4, 5, 6]])  # 创建一个二维数组
print(data2)

data3 = np.zeros((3, 4))  # 创建一个全0数组
print(data3)

data4 = np.ones((3, 4))   # 创建一个全1数组
print(data4)

data5 = np.empty((5, 2))   # 创建全空数组,其实每个值都是接近0的值
print(data5)

print(np.arange(1, 20, 5))
print(np.array([1, 2, 3, 4], float))
print(np.ones((2, 3), dtype='float64'))

输出结果如下:

[1 2 3]
[[1 2 3]
 [4 5 6]]
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
[[6.23042070e-307 8.90092016e-307]
 [1.29060871e-306 1.33511290e-306]
 [1.11261027e-306 1.11261502e-306]
 [1.42410839e-306 7.56597770e-307]
 [6.23059726e-307 1.42419530e-306]]
[ 1  6 11 16]
[1. 2. 3. 4.]
[[1. 1. 1.]
 [1. 1. 1.]]

Process finished with exit code 0


1.3 ndarry对象的数据类型

(1)查看数据类型

import numpy as np  # 导入numpy工具包
data_one = np.array([[1, 2, 3],
                     [4, 5, 6]])
print(data_one.dtype.name)

输出结果如下:

int32

(2)转换数据类型

import numpy as np  # 导入numpy工具包
data = np.array([[1, 2, 3], [4, 5, 6]])
print(data.dtype)

float_data = data.astype(np.float64) # 数据类型转换为float64
print(float_data.dtype)

float_data = np.array([1.2, 2.3, 3.5])
print(float_data)

int_data = float_data.astype(np.int64)
print(int_data)

str_data = np.array(['1', '2', '3'])
int_data = str_data.astype(np.int64)
print(int_data)


输出结果如下:

int32
float64
[1.2 2.3 3.5]
[1 2 3]
[1 2 3]

1.4 数组运算

(1)向量化运算

import numpy as np  # 导入numpy工具包
data1 = np.array([[1, 2, 3], [4, 5, 6]])
data2 = np.array([[1, 2, 3], [4, 5, 6]])

print(data1 + data2)   # 数组相加
print(data1 * data2)   # 数组相乘
print(data1 - data2)   # 数组相减
print(data1 / data2)   # 数组相除

输出结果如下:

[[ 2  4  6]
 [ 8 10 12]]
[[ 1  4  9]
 [16 25 36]]
[[0 0 0]
 [0 0 0]]
[[1. 1. 1.]
 [1. 1. 1.]]

Process finished with exit code 0


由结果可以看出数组向量化运算就是对应位置进行相应的运算。

(2)数组广播
numpy数组间的基础运算是一对一,也就是a.shape==b.shape,但是当两者不一样的时候,就会自动触发广播机制,如下例子:

import numpy as np  # 导入numpy工具包
arr1 = np.array([[0], [1], [2], [3]])
print(arr1.shape)

arr2 = np.array([1, 2, 3])
print(arr2.shape)

print(arr1 + arr2)

输出结果如下:

(4, 1)
(3,)
[[1 2 3]
 [2 3 4]
 [3 4 5]
 [4 5 6]]

Process finished with exit code 0

(3)数组与标量间的运算

import numpy as np  # 导入numpy工具包
data1 = np.array([[1, 2, 3], [4, 5, 6]])
data2 = 10

print(data1 + data2)   # 数组相加
print(data1 * data2)   # 数组相乘
print(data1 - data2)   # 数组相减
print(data1 / data2)   # 数组相除

输出结果如下:

[[11 12 13]
 [14 15 16]]
[[10 20 30]
 [40 50 60]]
[[-9 -8 -7]
 [-6 -5 -4]]
[[0.1 0.2 0.3]
 [0.4 0.5 0.6]]

Process finished with exit code 0

1.5 ndarray的索引和切片

(1)我们一起来来总结一下,看下面切片取值方式(对应颜色是取出来的结果):

在这里插入图片描述
(2)代码示例如下:

import numpy as np  # 导入numpy工具包
arr = np.arange(8)  # 创建一个一维数组
print(arr)
print(arr[5])   # 获取索引为5的元素
print(arr[3:5])  # 获取索引为3-5的元素,但不包括5
print(arr[1:6:2])  # 获取索引为1-6的元素,步长为2

输出结果如下:

[0 1 2 3 4 5 6 7]
5
[3 4]
[1 3 5]

Process finished with exit code 0

再看一个例子:

import numpy as np  # 导入numpy工具包
arr2d = np.array([[1, 2, 3],
                  [4, 5, 6],
                  [7, 8, 9]])  # 创建二维数组
print(arr2d)
print(arr2d[1])
print(arr2d[0, 1])
print(arr2d[:2])
print(arr2d[0:2, 0:2])
print(arr2d[1, :2])


输出结果如下:

[[1 2 3]
 [4 5 6]
 [7 8 9]]
[4 5 6]
2
[[1 2 3]
 [4 5 6]]
[[1 2]
 [4 5]]
[4 5]

(3)花式(数组)索引的基本使用

import numpy as np  # 导入numpy工具包
demo_arr = np.empty((4, 4))   # 创建一个空数组
for i in range(4):
    demo_arr[i] = np.arange(i, i + 4)  # 动态地为数组添加元素
print(demo_arr)

print(demo_arr[[0, 2]])   # 获取索引为[0,2]的元素
print(demo_arr[[1, 3], [1, 2]])  # 获取索引为(1,1)(3,2)的元素

输出结果如下:

[[0. 1. 2. 3.]
 [1. 2. 3. 4.]
 [2. 3. 4. 5.]
 [3. 4. 5. 6.]]
[[0. 1. 2. 3.]
 [2. 3. 4. 5.]]
[2. 5.]

Process finished with exit code 0

(4)布尔型

import numpy as np  # 导入numpy工具包
student_name = np.array(['Tom', 'Lily', 'Jack', 'Rose'])
print(student_name)

student_score = np.array([[79, 88, 80], [89, 90, 92], [83, 78, 85], [78, 76, 80]])
print(student_score)

# 对student_name和字符串“Jack”通过运算符产生一个布尔型数组
print(student_name == 'Jack')

# 将布尔数组作为索引应用于存储成绩的数组student_score,
# 返回的数据是True值对应的行

print(student_score[student_name == 'Jack', :1])

输出结果如下:

['Tom' 'Lily' 'Jack' 'Rose']
[[79 88 80]
 [89 90 92]
 [83 78 85]
 [78 76 80]]
[False False  True False]
[[83]]

说明:先对student_name和字符串“Jack”通过运算符产生一个布尔型数组,将布尔数组作为索引应用于存储成绩的数组student_score,返回的数据是True值对应的行。最后:1表示第0个元素。

1.6 数组的转置和轴对称

import numpy as np  # 导入numpy工具包

arr = np.arange(12).reshape(3, 4)
print(arr)
print(arr.T)  # 使用T对数组进行转置

arr = np.arange(16).reshape((2, 2, 4))
print(arr)
print(arr.transpose(1, 2, 0))  # 使用transpose()方法对数组进行转置

print(arr)
print(arr.swapaxes(1, 0))  # 使用swapaxes方法对数组进行转置

输出结果如下:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[[ 0  4  8]
 [ 1  5  9]
 [ 2  6 10]
 [ 3  7 11]]
[[[ 0  1  2  3]
  [ 4  5  6  7]]

 [[ 8  9 10 11]
  [12 13 14 15]]]
[[[ 0  8]
  [ 1  9]
  [ 2 10]
  [ 3 11]]

 [[ 4 12]
  [ 5 13]
  [ 6 14]
  [ 7 15]]]
[[[ 0  1  2  3]
  [ 4  5  6  7]]

 [[ 8  9 10 11]
  [12 13 14 15]]]
[[[ 0  1  2  3]
  [ 8  9 10 11]]

 [[ 4  5  6  7]
  [12 13 14 15]]]

Process finished with exit code 0


说明:arr.transpose(1, 2, 0)中的的1,2,0三个数分别代表shape()的三个数的顺序,初始的shape是(2,2,4),也就是2维的2 x 4矩阵,索引分别是shape的 [0], [1], [2]。
使用arr.transpose((1,2,0))之后,我们的索引就变成了shape[1],[2],[0]对应shape值是shape(2,4,2),所以矩阵形变化如上输出所示。
与此同时,我们矩阵的索引也发生了类似变化,如arr中的4,索引是arr[0,1,0],arr中的5是arr[0,1,1],transpose()后,4的位置应该是在[1,0,0],5的位置变成[1,1,0],同理8的索引从[1,0,0]变成[0,0,1]。
对于swapaxes(1, 0)可知,轴2不变,轴1和0位置互换。

1.7 numpy通用函数

import numpy as np  # 导入numpy工具包

arr = np.array([4, 9, 16])

print(np.sqrt(arr))  # 开方
print(np.abs(arr))   # 求绝对值
print(np.square(arr))  # 求平方

x = np.array([12, 9, 13, 15])
y = np.array([11, 10numpy基础入门

Python数据分析numpy入门

Python中的Numpy入门教程

python numpy片段

python数据分析与展示Numpy入门

Python数据分析numpy入门