python-Numpy数据分析(一)

python-Numpy数据分析(一)

使用numpy创建数据

import numpy as np

print('将普通的一维列表生成Numpy一维数组')
data = [1,23,45,5,4]
arr = np.array(data)
print(arr)
print('打印数组元素类型')
print(arr.dtype)

print('将普通的二维列表生成Numpy二维数组')
data = [[1,23,45,5,4],[3,5,6,7,8]]
arr = np.array(data)
print(arr)
print('打印数组维度')
print(arr.shape)

print('使用zeros/empty')
print('生成包含10个0的一维数组')
print(np.zeros(10))#生成包含10个0的一维数组

print('生成2*3的二维数组')
print(np.zeros((2,3)))#生成2*3的二维数组

print('生成3*2*4的三维数组,所有元素未初始化')
print(np.empty(3*2*4))#生成3*2*4的三维数组,所有元素未初始化

print('使用arange生成连续元素')
print(np.arange(15))
 
 

NumPy的ndarray NumPy数据类型

import numpy as np

print('生成数组时指定数据类型')
arr = np.array([1,2,43,545],dtype=np.float64)
print(arr.dtype)

print('使用astype复制数组并转换数据类型')
int_arr = np.array([1,23,454,56,54])
float_arr = int_arr.astype(np.float)
print(float_arr.dtype)

print('使用astype将float转换为int时小数部分舍掉')
float_arr2 = np.array([1.34,2.54,4.23432,5.45454,6.54,7.5])
int_arr2 = float_arr2.astype(np.int)
print(int_arr2)

print('使用astype把字符串转换为数组,如果失败抛出异常')
str_arr = np.array([1.2323,4.54545,6.34],dtype = np.string_)
float_arr3 = str_arr.astype(dtype = np.float)
print(float_arr3)

print('astype使用其他数组的数据类型作为参数')
int_arr3 = np.arange(10)
float_arr4 = np.array([2.34,4.34],dtype=np.float64)
print(int_arr3.astype(float_arr4.dtype))
print(int_arr3[0],int_arr3[1])

NumPy的ndarray 数组和标量之间的运算

import numpy as np
'''
NumPy的ndarray 数组和标量之间的运算
• 不用编写循环即可对数据执行批量运算
• 大小相等的数组之间的任何算术运算都会将运算应用到元素级
• 数组与标量的算术运算也会将那个标量值传播到各个元素
'''
#数组乘法/减法,对应元素相乘/相减
arr = np.array([[1,2,3,4,5],[1,2,3,4,5]])
print(arr*arr)
print(arr-arr)

#标量操作作用在数组的每个元素上
arr = np.array([[1,2,3,4],[1,2,3,4]])
print(1/arr)
print(arr ** 0.5)

NumPy的ndarray 基本的索引和切片

import numpy as np

#通过索引访问二维数组某一行或某个元素
arr = np.array([[1,2,3,45],[6,7,8,9]])
print(arr[0]) #访问第一行数组元素
print(arr[0][1])# 访问第一行数组的第二个元素
print(arr[0,1]) # numpy访问方式,普通python不可以使用。访问第一行数组的第二个元素

#使用切片访问和操作
arr = np.array([1,2,3,4,5,6,7,8,9])
print(arr[1:6]) # 打印元素arr[1]到arr[5]
arr2 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr2[:2]) #打印第1、2行
print(arr2[:2,1])#打印第1、2行的第2列
print(arr2[:,:1])#打印第一行第一列的所有元素
arr2[:2,1:]=0   #将第1、2行的第2、3列设置为0
print(arr2)


NumPy的ndarray 布尔型索引

'''
NumPy的ndarray 布尔型索引
• 布尔型数组的长度必须跟被索引的轴长度一致。
• 可以将布尔型数组跟切片、整数(或整数序列)混合使用

'''
import numpy as np
import numpy.random as np_random

print('使用boolean数组作为索引')
name_arr = np.array(['Bob','libai','dufu','wangzijian','zhanguo','huanming','tangguowei'])
ran_arr = np.random.randn(7,4) # 随机7*4数组
print(ran_arr)
print(name_arr == 'Bob') # 返回布尔数组,元素等于'Bob'为True,否则False。
print(ran_arr[name_arr == 'Bob']) # 利用布尔数组选择行

NumPy的ndarray 花式索引

'''
NumPy的ndarray 花式索引
• 花式索引(Fancy indexing)是一个NumPy术语,它指的是利用整数数组进
行索引。
• 一次传入多个索引数组会有一点特别。它返回的是一个一维数组,其中的元素
对应各个索引元组。
'''
import numpy as np

print('使用整数数组作为索引')
arr = np.empty((8,4))
for i in range(8):
    arr[i] = i
print(arr)

print(arr[[4,3,2,6]])# 打印arr[4]、arr[3]、arr[2]和arr[6]。
print(arr[[-3,-5,-7]]) # 打印arr[-3]、arr[-5]和arr[-7]行,就是打印倒数第3、5、7行

arr2 = np.arange(32).reshape(8,4) # 通过reshape变换成二维数组
print('arr2数组\n',arr2)
print('打印arr2[1, 0]、arr[5, 3],arr[7, 1]和arr[2, 2]')
print(arr2[[1,5,7,2],[0,3,1,2]])    #[ 4 23 29 10]
print('arr2分别打印1、5、7、2行每行的0、3、1、2列的数据')
print(arr2[[1,5,7,2]][:,[0,3,1,2]])
print('使用np.ix_()方法输出上面的效果')
print(arr2[np.ix_([1,5,7,2],[0,3,1,2])])

 
 

NumPy的ndarray 数组转置和轴对换

import numpy as np
import numpy.random as np_random

print('转置矩阵')
arr = np.arange(15).reshape((3,5))  #自动生成3行5列数组
print(arr)
print(arr.T)    #arr.T 改属性可以将矩阵的行和列对调,使得行变为列,列变为行

print('转置矩阵做点乘积')
arr2 = np.arange(15).reshape((3,5))
print(np.dot(arr.T,arr2)) #利用np.dot计算矩阵内积XTX

print('高维矩阵转换')
arr3 = np.arange(16).reshape((2,2,4))
print(arr3)
'''
详细解释:
arr数组的内容为
- a[0][0] = [0, 1, 2, 3]
- a[0][1] = [4, 5, 6, 7]
- a[1][0] = [8, 9, 10, 11]
- a[1][1] = [12, 13, 14, 15]
transpose的参数为坐标,正常顺序为(0, 1, 2, ... , n - 1),
现在传入的为(1, 0, 2)代表a[x][y][z] = a[y][x][z],第0个和第1个坐标互换。
- a'[0][0] = a[0][0] = [0, 1, 2, 3]
- a'[0][1] = a[1][0] = [8, 9, 10, 11]
- a'[1][0] = a[0][1] = [4, 5, 6, 7]
- a'[1][1] = a[1][1] = [12, 13, 14, 15]
'''
print('arr3高维矩阵转换')
print(arr3.transpose((1, 0, 2)))
print('直接交换第1和第2个坐标')
print(arr3.swapaxes(1, 2))  # 直接将第1和第2个轴坐标对换


NumPy的ndarray 快速的元素级数组函数

'''
NumPy的ndarray 快速的元素级数组函数
• 一元函数 I
类型 说明
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值,即小于等于该值的最小整数。

NumPy的ndarray 快速的元素级数组函数
• 一元函数 II
类型 说明
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。

NumPy的ndarray 快速的元素级数组函数
• 二元函数 I
类型 说明
add 将数组中对应的元素相加
subtract 从第一个数组中减去第二个数组中的元素
multiply 数组元素相乘
divide, floor_divide 除法或向下取整除法
power 对第一个数组中的元素A和第二个数组中对应位置的元素B,计算A^B。
maximum, fmax 元素级的最大值计算。fmax将忽略NaN。
minimum, fmin 元素级的最小值计算。fmin将忽略NaN。
mod 元素级的求模计算

NumPy的ndarray 快速的元素级数组函数
• 二元函数 II
类型 说明
copysign 将第二个数组中的符号复制给第一个数组中的值
greater, greater_equal, less,less_equal,equal, not_equal 执行元素级的比较,最终产生布尔型数组。
logical_and, logical_or,logical_xor  执行元素级的真值逻辑运算,最终产生布尔型数组
'''
import numpy as np
import numpy.random as np_random

print('求平方根')
arr = np.arange(10)
print(arr)
print(np.sqrt(arr))

print('数组比较')
x = np_random.randn(8)
y = np_random.randn(8)
print(x)
print(y)
print(np.maximum(x,y))

print('使用modf函数把浮点数分解成整数和小数部分')
arr = np_random.randn(7)*5
print(np.modf(arr))


猜你喜欢

转载自blog.csdn.net/m0_38039437/article/details/80666622
今日推荐