numpy-01_创建数组、数组计算

原文链接

定义

一个在Python中做科学计算的基础库,重在数值计算,也是大部分PYTHON科学计算库的基础库,多用于在大型、多维数组上执行数值运算。

是用于处理数值型的数据

优点:

  1. 快速
  2. 方便
  3. 科学计算的基础库

numpy创建数组(矩阵)

import numpy as np
import random

# 使用numpy生成数组,得到 ndarray 的数据类型
# dtype 参数指定数组中数据的类型
a = np.array([0, 1, 2, 3, 4], dtype="int64")
b = np.array(range(5))
c = np.arange(0, 5, 2)

# 调整数据类型
d = b.astype("int64")

# numpy中的小数
e = np.array([random.random() for i in range(10)])
# 设置保留的小数位数(在python中也是用这个函数)
f = np.round(e, 2)


# 输出数组中的数据和数组类型
print(a, type(a))
print(b, type(b))
print(c, type(c))
print(d, type(d))
print(e, type(e))
print(f, type(f))
# 输出数组中存放的数据的类型
print(a.dtype)
print(b.dtype)
print(c.dtype)
print(d.dtype)
print(e.dtype)
print(f.dtype)

输出:

[0 1 2 3 4] <class 'numpy.ndarray'>
[0 1 2 3 4] <class 'numpy.ndarray'>
[0 2 4] <class 'numpy.ndarray'>
[0 1 2 3 4] <class 'numpy.ndarray'>
[0.20662315 0.86705151 0.7718923  0.40514403 0.91964175 0.3056898
 0.52026858 0.42492263 0.33122519 0.39091112] <class 'numpy.ndarray'>
[0.21 0.87 0.77 0.41 0.92 0.31 0.52 0.42 0.33 0.39] <class 'numpy.ndarray'>
int64
int32
int32
int64
float64
float64

其中 int32是numpy提供的类型,还有以下几种

image-20210125115048288

数组的计算

a.shape

返回数组的形状,分别为每一维度的值

y = np.array([[[1, 2, 3], [4, 5, 6]], [[11, 22, 33], [44, 55, 66]], [[111, 222, 333], [444, 555, 666]]])
print(y.shape)

(3, 2, 3)
x.reshape()

更改数组形状

## 1. 数组升维
x = np.arange(15)
print(x.shape)
y = x.reshape((3, 5))
print(y.shape)

## 输出
(15,)
(3, 5)

## 2. 或者
t1 = np.arange(24).reshape((2, 3, 4))
t1
Out[27]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],
       
       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

## 3. 也可以进行数组降维
y = np.array([[[1, 2, 3], [4, 5, 6]], [[11, 22, 33], [44, 55, 66]], [[111, 222, 333], [444, 555, 666]]])
y.reshape((6, 3))
Out[34]: 
array([[  1,   2,   3],
       [  4,   5,   6],
       [ 11,  22,  33],
       [ 44,  55,  66],
       [111, 222, 333],
       [444, 555, 666]])

y.flatten():

直接将数组展开为一维数组

y.flatten()
Out[50]: 
array([  1,   2,   3,   4,   5,   6,  11,  22,  33,  44,  55,  66, 111,
       222, 333, 444, 555, 666])
数组和数字进行计算

数组中的每个数字都进行计算,这是 numpy 中的广播机制

y + 2

# 结果
array([[  3,   4,   5],
       [  6,   7,   8],
       [ 13,  24,  35],
       [ 46,  57,  68],
       [113, 224, 335],
       [446, 557, 668]])

y * 2
array([[   2,    4,    6],
       [   8,   10,   12],
       [  22,   44,   66],
       [  88,  110,  132],
       [ 222,  444,  666],
       [ 888, 1110, 1332]])

数组和数组进行计算

如果行列都相同,对应位置的数字进行计算

y2 = np.arange(100, 118)
y2 = y2.reshape((6, 3))
y + y2

array([[101, 103, 105],
       [107, 109, 111],
       [117, 129, 141],
       [153, 165, 177],
       [223, 335, 447],
       [559, 671, 783]])

或,如果列数相同则每一行进行计算

y
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])
       
y1
array([0, 1, 2, 3, 4, 5])

y - y1
array([[ 0,  0,  0,  0,  0,  0],
       [ 6,  6,  6,  6,  6,  6],
       [12, 12, 12, 12, 12, 12],
       [18, 18, 18, 18, 18, 18]])

或,如果行数相同则每一列进行计算

y
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])

y1
array([[0],
       [1],
       [2],
       [3]])

y - y1
array([[ 0,  1,  2,  3,  4,  5],
       [ 5,  6,  7,  8,  9, 10],
       [10, 11, 12, 13, 14, 15],
       [15, 16, 17, 18, 19, 20]])

广播原则

如果两个数组的后缘维度(即从末尾开始算起的维度】的轴长度相符其中一方的长度为1,则认为它们是广播兼容的。广播会在缺失和(或)长度为1的维度上进行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值