Numpy数据处理大全

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31813549/article/details/79954437

Numpy数据处理

Author:Tonny
转载请注明出处

一、读取文件

# 数据加载
data = np.loadtxt('load/feature.txt', dtype=np.int32, delimiter=',')
# 数据保存
np.savetxt('save/feature.txt', data, fmt='%d', delimiter=',')

二、构建ndarray

  1. np.array()构造ndarray
    numpy.array()中传入数组参数,可以是一维的也可以是二维三维的。numpy 会将其转变成 ndarray 的结构。也可以是不同的数据类型,numpy会自动进行数据类型转换,转换成统一的数据类型。
vector = numpy.array([1,2,3,4])
matrix = numpy.array([[1,2,3],[4,5,6]])
vector = numpy.array([1,2,'3',4])
array(['1', '2', '3', '4'],dtype='<U21')
  1. 利用arrange,ones,zeros,random生成
# arrage生成1维的ndarray
np.arange(0, 10, 2)
# ones,zeros,random生成多维的ndarray
np.ones((2, 3, 4), dtype=np.int32)
np.zeros((3, 4))
np.random.random((2, 3))
  1. 利用 .shape 查看结构,numpy默认一维向量是列向量,0维为列,1维为行
  2. 利用 .dtype 查看类型
  3. 利用 .ndim 查看维度
  4. 利用下标[2, 5], [ : , : 5]或者[: : -1]等进行索引与切片
  5. 利用 np.newaxis将一维转化为二维
import numpy as np
print(vector.shape) # (4,)
print(vector.dtype) # dtype('int64')
print(matrix.ndim)  # 2
print(vector[:,np.newaxis]) #[[1],[2],[3],[4]]

三、运算

1. 条件运算

实现对数据的过滤

import numpy
vector = numpy.array([[5, 10, 15, 20],[1,6,12,18]])
equal_to_ten = (vector > 10)
print(equal_to_ten)
print(vector[equal_to_ten])
equal_to_ten_and_five = (vector > 10) | (vector == 5)
print(equal_to_ten_and_five)
print(vector[equal_to_ten_and_five])
# 结果
[[False False  True  True]
 [False False  True  True]]
[15 20 12 18]
[[ True False  True  True]
 [False False  True  True]]
[ 5 15 20 12 18]

2. 类型转换

import numpy
# list 转换为 ndarray
list = [[5, 10, 15, 20],[1,6,12,18]]
matrix = numpy.array(list)
# ndarray 转换为 list
list_1 = matrix.tolist()
# ndarray 内部数据类型转换
matrix = matrix.astype(str)
print(matrix)
# 结果
[['5' '10' '15' '20']
 ['1' '6' '12' '18']]

3. 常用函数

import numpy as np
# sum()函数,全部求和,按行求和,按列求和  举一反三: min() max()
matrix = np.array([[1,2,3],
                    [4,5,6],
                    [7,8,9]])
print(matrix.sum(),matrix.sum(1),matrix.sum(0))
# reshape函数,形状的转变
arr = np.arange(15).reshape(3, 5)

4. ndarray运算,元素的运算

ndarray中的元素逐个进行运算

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = np.array(3)
# 减法
print(a - b)
# 幂
print(a**2)
# 根号
print(np.sqrt(a))
# 指数
print(np.exp(a))
# 向下取整
print(np.floor(np.exp(a)))
# 结果
[[-2 -1  0]
 [ 1  2  3]]
[[ 1  4  9]
 [16 25 36]]
[[1.         1.41421356 1.73205081]
 [2.         2.23606798 2.44948974]]
[[  2.71828183   7.3890561   20.08553692]
 [ 54.59815003 148.4131591  403.42879349]]
[[  2.   7.  20.]
 [ 54. 148. 403.]]

5. 矩阵运算

import numpy as np
A = np.array([[1,2,3],[4,5,6]])
B = np.array([[7,8,9],[10,11,12]])
C = np.array([[7,8],[9,10],[11,12]])
D = np.array([[[0,1,2],[3,4,5]],[[6,7,8],[9,10,11]]])
# 矩阵对应位置一次相乘
print(A*B)
# 矩阵对于位置一次相减
print(A-B)
# 矩阵乘法
print(A.dot(C))
# 转置,适用于一,二维数组
print(A.T)
# 转置,适用于多维数组,正常情况为(0,1,2),(1,0,2)为第一,二维转置,(0,2,1)为第二,三维转置
print(D.transpose(1,0,2), D.transpose(0,2,1))
# 结果
[[ 7 16 27]
 [40 55 72]]
[[-6 -6 -6]
 [-6 -6 -6]]
[[ 58  64]
 [139 154]]
[[1 4]
 [2 5]
 [3 6]]
[[[ 0  1  2]
  [ 6  7  8]]
 [[ 3  4  5]
  [ 9 10 11]]] 
  [[[ 0  3]
  [ 1  4]
  [ 2  5]]
 [[ 6  9]
  [ 7 10]
  [ 8 11]]]

6. 矩阵分割与合并

矩阵的合并 hstack , vstack, column_stack , row_stack , concatenate , c_ , r_

import numpy as np
A = np.array([[1,2,3],[4,5,6]])
B = np.array([[7,8,9],[10,11,12]])
# 水平合并
print(np.hstack([A,B]))
# 垂直合并
print(np.vstack([A,B]))
# 水平分割,平均分割为3部分
print(np.hsplit(A,3))
# 水平分割,在第2,3列后面进行分割
print(np.hsplit(A,(2,3)))
# 垂直分割,平均分割为2部分
print(np.vsplit(A,2))
# 垂直分割,在第2行后面进行分割
print(np.vsplit(A,(1,2)))
# 结果
[[ 1  2  3  7  8  9]
 [ 4  5  6 10 11 12]]
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
[array([[1],
       [4]]), array([[2],
       [5]]), array([[3],
       [6]])]
[array([[1, 2],
       [4, 5]]), array([[3],
       [6]]), array([], shape=(2, 0), dtype=int64)]
[array([[1, 2, 3]]), array([[4, 5, 6]])]
[array([[1, 2, 3]]), array([[4, 5, 6]]), array([], shape=(0, 3), dtype=int64)]

四、复制与视图

import numpy as np
A = np.array([[1,2,3],[4,5,6]])
# 简单的赋值不拷贝数组对象或它们的数据。
B = A
# 视图法:不同的数组对象分享同一个数据。创造一个新的数组对象,但指向同一数据。
B = A.view()
# 切片法:不同的数组对象分享同一个数据。创造一个新的数组对象,但指向同一数据。
B = A[:,:2]
# 深复制:创建新的数组对象和数据
B = A.copy()

注: 如果任何疑问,欢迎提问,转载请注明出处.

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页