Python 之 NumPy

《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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张之海

若有帮助,客官打赏一分吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值