《Python数据分析》第二章NumPy数组 全部内容
import numpy as np
# 2.1 numpy 数组对象
print('2.1 numpy 数组对象')
a = np.arange(5)
print(a)
print(a.dtype)
print(a.shape)
# 2.2 创建多维数组
print('\n2.2 创建多维数组')
m = np.array([np.arange(2),np.arange(2)])
print(m)
print(m.shape)
# 2.3 选择numpy数组元素
print('\n2.3 选择numpy数组元素')
a = np.array([np.arange(1,3),np.arange(3,5)])
print(a)
print(a[0, 0])
# 2.4 numpy的数值类型
print('\n2.4 numpy的数值类型')
print(np.float64(42))
print(np.int8(42.0))
print(bool(42))
print(bool(0))
print(float(True))
print(float(False))
print(np.arange(7, dtype=np.uint16))
t = 42.0 + 1j
print(t)
print(np.real(t))
print(np.imag(t))
# 2.4.1 数据类型对象
print('\n2.4.1 数据类型对象')
print(a.dtype)
print(a.dtype.itemsize)
# 2.4.3 Dtype构造函数
print('\n2.4.3 Dtype构造函数')
print(np.dtype(float))
print(np.dtype('f'))
print(np.dtype('d'))
print(np.dtype('f8'))
print(np.sctypeDict.keys())
# 2.4.4 dtype属性
print('\n2.4.4 dtype属性')
t = np.dtype('float64')
print(t)
print(t.char)
print(t.type)
# 2.5 切片和索引
print('\n2.5 切片和索引')
a = np.arange(9)
print(a)
print(a[3:7])
print(a[0:7:2])
print(a[::-1])
# 2.6 处理数组形状
print('\n2.6 处理数组形状')
b = np.arange(24).reshape(2,3,4)
print(b)
print(b.ravel()) # ravel:使纠缠 返回数组的视图
print(b.flatten()) # flatten 使变平 返回真实的数组,需要重新分配内存
b.shape = (6, 4) # 用元组改变数组形状
print(b)
print(b.transpose()) # 转置
b.resize((2, 12)) # resize()和reshape的区别:参数不同。resize的参数是元组
print(b)
# 总结:改变数组形状的三种方式有元组,reshape,resize
# 2.6.1 堆叠数组
print('\n2.6.1 堆叠数组')
a = np.arange(9).reshape(3,3)
print(a)
b = 2 * a
print(b)
print(np.hstack((a, b))) # 水平叠加
print(np.concatenate((a, b), axis=1)) # concatenate:连接
print(np.vstack((a, b))) # 垂直叠加
print(np.concatenate((a, b), axis=0))
print(np.dstack((a, b))) # 深度叠加,即沿着第三个坐标轴的方向叠加一落数组
oned = np.arange(9).reshape(3,3)
print(oned)
twiced_oned = 2 * oned
print(twiced_oned)
print(np.column_stack((oned, twiced_oned))) # 列式堆叠:将对应列连接在一起构成新的列。类似于垂直叠加
print(np.row_stack((oned, twiced_oned))) # 行式堆叠:类似于横向叠加
# 2.6.2 拆分numpy数组
print('\n2.6.2 拆分numpy数组')
# 首先搞清楚什么是第一维度,什么是第二维度。
#
# a = [[1,2,3],[4,5,6]]
# 令a1 = [1,2,3],a2 = [4,5,6] 那么 a = [a1,a2]
# 第一维度指最外层的维度。第一维度的元素有a1 a2,所以第一维度相加就是a1 +a2。
# 第二维度指从外到内,第二层的维度,此处可以看做a1里面的维度。所以,对第二维度相加,就是对a1内部的元素相加得一个和,对a2中的元素相加得一个和。
a = np.array([np.arange(1, 4), np.arange(4, 7)])
print(a)
print(np.sum(a, axis=0)) # 最外层的维度
print(np.sum(a, axis=1)) # 从外到内,往里一层的维度
a = np.array(np.arange(9)).reshape(3,3)
print(a)
print(np.vsplit(a, 3)) # 相当于从第一维拆分,将数组拆分为3个子数组 a = [a1,a2,a3],拆分后a1单独作为一个数组,a2、a3类似。
print(np.hsplit(a, 3)) #相当于从第二维拆分 a = [a1,a2,a3] ,将a1中的元素拆开,与a2、a3中的元素进行组合
c = np.arange(27).reshape(3, 3,3)
print(np.dsplit(c,3)) # 深度拆分,相当于沿着第三个维度拆分
# 2.6.3 numpy数组的属性
print('\n2.6.3 numpy数组的属性')
b = np.arange(24).reshape(2,12)
print(b)
print(b.ndim) # 维数
print(b.size) # 元素个数
print(b.itemsize) # 每个元素的字节数
print(b.nbytes) # 整个数组的字节数量
b.resize(6,4)
print(b)
print(b.T) # 转置
b = np.array([1+1.j,3+2.j])
print(b)
print(b.real) # 实部
print(b.imag) # 虚部
b = np.arange(4).reshape(2,2)
print(b)
f = b.flat
for item in f: ## 用于遍历
print(item)
print(b.flat[2])
print(b.flat[[1, 3]])
b.flat = 7
print(b)
b.flat[[1,3]] = 1
print(b)
# 2.6.4 数组的转换
print('\n2.6.4 数组的转换')
b = np.array([1.+1.j,3.+3.j])
print(b)
print(b.tolist()) # 将numpy数组转换为列表
print(b.astype(int)) # 转换numpy数组中元素的类型
# 2.7 创建数组的视图和拷贝
print('\n2.7 创建数组的视图和拷贝')
a = np.array(np.arange(10))
print(a)
b = a.view()
print(b)
b.flat[1:5] = 0
print(a)
print(b)
执行结果
E:\Python37\python.exe "E:/PyCharm 2018.2.4/PycharmProjects/PythonStudy/NumPy_study.py"
2.1 numpy 数组对象
[0 1 2 3 4]
int32
(5,)
2.2 创建多维数组
[[0 1]
[0 1]]
(2, 2)
2.3 选择numpy数组元素
[[1 2]
[3 4]]
1
2.4 numpy的数值类型
42.0
42
True
False
1.0
0.0
[0 1 2 3 4 5 6]
(42+1j)
42.0
1.0
2.4.1 数据类型对象
int32
4
2.4.3 Dtype构造函数
float64
float32
float64
float64
dict_keys(['?', 0, 'byte', 'b', 1, 'ubyte', 'B', 2, 'short', 'h', 3, 'ushort', 'H', 4, 'i', 5, 'uint', 'I', 6, 'intp', 'p', 9, 'uintp', 'P', 10, 'long', 'l', 7, 'L', 8, 'longlong', 'q', 'ulonglong', 'Q', 'half', 'e', 23, 'f', 11, 'double', 'd', 12, 'longdouble', 'g', 13, 'cfloat', 'F', 14, 'cdouble', 'D', 15, 'clongdouble', 'G', 16, 'O', 17, 'S', 18, 'unicode', 'U', 19, 'void', 'V', 20, 'M', 21, 'm', 22, 'bool8', 'Bool', 'b1', 'float16', 'Float16', 'f2', 'float32', 'Float32', 'f4', 'float64', 'Float64', 'f8', 'complex64', 'Complex32', 'c8', 'complex128', 'Complex64', 'c16', 'object0', 'Object0', 'bytes0', 'Bytes0', 'str0', 'Str0', 'void0', 'Void0', 'datetime64', 'Datetime64', 'M8', 'timedelta64', 'Timedelta64', 'm8', 'int32', 'Int32', 'i4', 'uint32', 'UInt32', 'u4', 'int64', 'Int64', 'i8', 'uint64', 'UInt64', 'u8', 'int16', 'Int16', 'i2', 'uint16', 'UInt16', 'u2', 'int8', 'Int8', 'i1', 'uint8', 'UInt8', 'u1', 'complex_', 'int0', 'uint0', 'single', 'csingle', 'singlecomplex', 'float_', 'intc', 'uintc', 'int_', 'longfloat', 'clongfloat', 'longcomplex', 'bool_', 'unicode_', 'object_', 'bytes_', 'str_', 'string_', 'int', 'float', 'complex', 'bool', 'object', 'str', 'bytes', 'a'])
2.4.4 dtype属性
float64
d
<class 'numpy.float64'>
2.5 切片和索引
[0 1 2 3 4 5 6 7 8]
[3 4 5 6]
[0 2 4 6]
[8 7 6 5 4 3 2 1 0]
2.6 处理数组形状
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]
[[ 0 4 8 12 16 20]
[ 1 5 9 13 17 21]
[ 2 6 10 14 18 22]
[ 3 7 11 15 19 23]]
[[ 0 1 2 3 4 5 6 7 8 9 10 11]
[12 13 14 15 16 17 18 19 20 21 22 23]]
2.6.1 堆叠数组
[[0 1 2]
[3 4 5]
[6 7 8]]
[[ 0 2 4]
[ 6 8 10]
[12 14 16]]
[[ 0 1 2 0 2 4]
[ 3 4 5 6 8 10]
[ 6 7 8 12 14 16]]
[[ 0 1 2 0 2 4]
[ 3 4 5 6 8 10]
[ 6 7 8 12 14 16]]
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 0 2 4]
[ 6 8 10]
[12 14 16]]
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 0 2 4]
[ 6 8 10]
[12 14 16]]
[[[ 0 0]
[ 1 2]
[ 2 4]]
[[ 3 6]
[ 4 8]
[ 5 10]]
[[ 6 12]
[ 7 14]
[ 8 16]]]
[[0 1 2]
[3 4 5]
[6 7 8]]
[[ 0 2 4]
[ 6 8 10]
[12 14 16]]
[[ 0 1 2 0 2 4]
[ 3 4 5 6 8 10]
[ 6 7 8 12 14 16]]
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 0 2 4]
[ 6 8 10]
[12 14 16]]
2.6.2 拆分numpy数组
[[1 2 3]
[4 5 6]]
[5 7 9]
[ 6 15]
[[0 1 2]
[3 4 5]
[6 7 8]]
[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]
[array([[0],
[3],
[6]]), array([[1],
[4],
[7]]), array([[2],
[5],
[8]])]
[array([[[ 0],
[ 3],
[ 6]],
[[ 9],
[12],
[15]],
[[18],
[21],
[24]]]), array([[[ 1],
[ 4],
[ 7]],
[[10],
[13],
[16]],
[[19],
[22],
[25]]]), array([[[ 2],
[ 5],
[ 8]],
[[11],
[14],
[17]],
[[20],
[23],
[26]]])]
2.6.3 numpy数组的属性
[[ 0 1 2 3 4 5 6 7 8 9 10 11]
[12 13 14 15 16 17 18 19 20 21 22 23]]
2
24
4
96
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]
[[ 0 4 8 12 16 20]
[ 1 5 9 13 17 21]
[ 2 6 10 14 18 22]
[ 3 7 11 15 19 23]]
[1.+1.j 3.+2.j]
[1. 3.]
[1. 2.]
[[0 1]
[2 3]]
0
1
2
3
2
[1 3]
[[7 7]
[7 7]]
[[7 1]
[7 1]]
2.6.4 数组的转换
[1.+1.j 3.+3.j]
[(1+1j), (3+3j)]
[1 3]
2.7 创建数组的视图和拷贝
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[0 0 0 0 0 5 6 7 8 9]
[0 0 0 0 0 5 6 7 8 9]
E:/PyCharm 2018.2.4/PycharmProjects/PythonStudy/NumPy_study.py:164: ComplexWarning: Casting complex values to real discards the imaginary part
print(b.astype(int)) # 转换numpy数组中元素的类型
Process finished with exit code 0