numpy数组

numpy数组简介
简介与安装

numpy是python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。numpy经常与Matplotlib绘图库一起使用,可以画出各种各样的图像,numpy在机器学习中应用十分广泛。
要使用numpy就要安装,安装命令如下:

pip install numpy

安装成功之后就可以引用了,例如:

import numpy

由于程序中经常要用到numpy,往往建议使用下列的引用:

import numpy as np

这样就在引用时把numpy改成简单的名称np,使用起来更加方便。

numpy数组及其操作

1.创建一般数组
numpy本质上来说是一个数组,可以是一维的、二维的甚至是任意高维的数组,numpy使用array([…])建立数组,其中[…]是数组的数据,例如

a = np.array([1,2,3])
print(a)
# [1 2 3]

数组和列表的关系如下:

import numpy as np
# 列表
L = [1, 2, 3]
print(L)
for x in L:
    print(x)
# 数组
a = np.array([1, 2, 3])
print(a)
for x in a:
    print(x)

列表和数组中,每个元素平方和求数组中最大值

import numpy as np
# 对数组每个元素平方
L = [1, 2, 3]
print(L)
m = L[0]
for x in L:
    if x > m:
        m = x
print(m)
for i in range(len(L)):
    L[i] = L[i] * L[i]
print(L)
# 数组
a = np.array([1, 2, 3])
print(a)
print(a.max())
a = a * a
print(a)

例2:建立二维的numpy数组并显示

import numpy as np
# 建立二维的numpy数组并显示
# a = np.array([[1, 2, 3], [4, 5, 6]], np.int)
a = np.array([[1, 2, 3], [4, 5, 6]])
for i in range(len(a)):
    print(a[i])
print()

例3:显示数组的维数

import numpy as np
# 显示数组的维数
print("a 数组")
# a = np.array([1, 2, 3], np.int)
a = np.array([1, 2, 3])
print("ndim=", a.ndim)
print("shape=", a.shape)
print("a=", a)
print("b 数组")
# b = np.array([[1, 2, 3], [4, 5, 6]], np.int)
b = np.array([[1, 2, 3], [4, 5, 6]])
print("ndim=", b.ndim)
print("shape=", b.shape)
print("b=", b)

例4:创建zeros、ones、empty、random数组

import numpy as np
# 创建zeros、ones、empty、random数组
# np.zeros(shape, dtype)创建形状为shape类型为dtype的全0数组
# a = np.zeros((2, 3), np.int)
a = np.zeros((2, 3))
print("a=", a)
# np.ones(shape, dtype)创建形状为shape类型为dtype的全1数组
# b = np.ones((2, 3), np.int)
b = np.ones((2, 3))
print("b=", b)
# np.empty(shape, dtype)创建形状为shape类型为dtype的空数组,empty数组的值不是真为空,而是指数组没有初始值,是随机值
# c = np.empty((2, 3), np.int)
c = np.empty((2, 3))
print("c=", c)
# np.random.random(shape, dtype)创建形状为shape,值为(0,1)范围均匀分布随机值的数组
d = np.random.random((2, 3))
print("d=", d)
# np.random.randint(a, b, shape)创建形状为shape,值为[a, b]整数范围的随机值的数组
e = np.random.randint(1, 4, (2, 3))
print("e=", e)
# np.random.normal(mu, std, shape)创建形状为shape,平均值为mu,均方差为std的正太分布数组
创建序列值数组

1.arange创建数组

import numpy as np
# arange创建数组
# 创建序列值数组
# numpy.arange(start, end, step, dtype)
#
import numpy as np
a = np.arange(1, 5)
print("a=", a)
# b = np.arange(5, dtype=np.float)
b = np.arange(5, dtype=np.float_)
print("b=", b)
# a= [1 2 3 4]
# b= [0. 1. 2. 3. 4.]

2.linspace创建序列值数组

# linspace 创建序列值数组
# numpy.linspace(start, end, n, endpoint)
# 其中对(start, end)区间平分n等分,默认endpoint=True表示包含end值,如果endpoint=False就不包含end值。

import numpy as np
a = np.linspace(1, 3, 5)
print("a=", a)
b = np.linspace(1, 3, 5, endpoint=False)
print("b=", b)
# a= [1.  1.5 2.  2.5 3. ]
# b= [1.  1.4 1.8 2.2 2.6]
numpy数组的简单操作
import numpy as np
a = np.array([1, 2, 3])
print(a)
for i in range(len(a)):
    print(a[i])

# 浮点型类型的数组
b = np.array([1.1, 2, 3], np.float_)
print(b)

# 字符串类型的数组
c = np.array(["a", "b", "c"], np.unicode_)
print(c)

# 定义二维数组
d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], np.int_)
print(d)
# 维数
print(d.ndim)
# 形状
print(d.shape)
for i in range(d.shape[0]):
    for j in range(d.shape[1]):
        print(d[i, j], end=" ")
    print()
改变数组的形状
import numpy as np
a = np.arange(12)
print("a = ", a)
b = a.reshape(3, 4)
print("b = ", b)
c = b.reshape(4, 3)
print("c = ", c)
d = c.reshape(2, 3, 2)
print("d = ", d)
# 拉伸数组,把高维数组拉伸为一维的数组
e = d.ravel()
print("e = ", e)
改变数组的类型
import numpy as np
# 改变数组类型
f = np.array([1, 2, 3], np.int_)
print(f.dtype)
# 改变int数组为float
f = f.astype(np.float_)
print(f.dtype)
# int32
# float64
数组的切片

(1)一维数组切片
一维数组的切片与字符串切片非常相似。
(2)二维数组切片
数组切片一般可以表示成a[sliceX, sliceY],其中sliceX,sliceY分别是行列切片
sliceX或者sliceY是单一数值,那么取数组的一个元素。
sliceX或者sliceY如果为":"的格式,那么是指整行或者整列。
sliceX或者sliceY为start: end:step的序列格式,那么就是按这个序列取指定的行或者列。
sliceX或者sliceY有一个是列表,那么取列表中规定的行或者列。
sliceX或者sliceY都是列表,那么要求它们两个长度要一样,取两个列表对应元素确定的数组元素。

import numpy as np
# 数组的切片
# 数组切片一般表示成a[sliceX, sliceY],其中sliceX,sliceY分别是行列切片,有如下规则:
# sliceX或者sliceY是单一数值,那么取数组的一个元素,例如a[0,2]是取第一行第三列元素。
# sliceX或者sliceY如果为":"的格式,那么是指整行或者整列,例如a[:,1]是第一列全部,a[2,:]是第三行全部,而a[:,:]是a自己
# sliceX或者sliceY为start:end:step的序列格式,那么就是按这个序列取指定的行或者列,例如a[1:3, 2]是第一,二行与第3列的元素,即a[1, 2], a[2, 2]两个元素。
# sliceX或者sliceY有一个是列表,那么取列表中规定的行或者列,例如a[[0, 2], 1]是元素a[0, 1]=1, a[2, 1]=9两个元素。
# sliceX或者sliceY都是列表,那么要求它们两个长度要一样,取两个列表对应元素确定的数组元素,例如:a[[0, 2], [1, 3]]是元素a[0, 1]与a[2, 3]两个元素。注意不是a[0, 1],a[0, 3],a[2, 1],a[2, 3]的四个元素。
a = np.arange(12).reshape(3, 4)
print(a)
print("a[0, 2]=", a[0, 2])
print("a[:, 1]=", a[:, 1])
print("a[2, :]=", a[2, :])
print("a[1:3, 2]=", a[1:3, 2])
print("a[[0, 2], 1]=", a[[0, 2], 1])
print("a[[0, 2], :]=", a[[0, 2], :])
print("a[[0, 2], [1, 3]]=", a[[0, 2], [1, 3]])
数组的计算

一个常数与数组进行四则运算

import numpy as np
a = np.arange(12).reshape(3, 4)
print("a=", a)
print("a+2=", a+2)
print("a*2=", a*2)
print("a-2=", a-2)
print("a/2=", a/2)

两个相同形状的数组进行四则运算

import numpy as np
a = np.arange(1, 7).reshape(2, 3)
b = np.arange(-1, -7, -1).reshape(2, 3)
print("a=", a)
print("b=", b)
print("a+b=", a+b)
print("a*b=", a*b)
print("a-b=", a-b)
print("a/b=", a/b)

开根号

import numpy as np
a = np.arange(1, 7).reshape(2, 3)
b = np.sqrt(a)
print(a)
# [[1 2 3]
#  [4 5 6]]
print(b)
# [[1.         1.41421356 1.73205081]
#  [2.         2.23606798 2.44948974]]

sin函数运算

import numpy as np
a = np.arange(1, 7).reshape(2, 3)
b = np.sin(a)
print(a)
# [[1 2 3]
#  [4 5 6]]
print(b)
# [[ 0.84147098  0.90929743  0.14112001]
#  [-0.7568025  -0.95892427 -0.2794155 ]]

数组的比较运算,例如:数组元素大于3的数

import numpy as np
a = np.arange(6).reshape(2, 3)
b = (a > 3)
print(a)
# [[0 1 2]
#  [3 4 5]]
print(b)
# [[False False False]
#  [False  True  True]]

把0.5以下的值全换成0

import numpy as np
a = np.random.random((3, 5))
print("a=", a)
# b = (a > 0.5)
# for i in range(a.shape[0]):
#     for j in range(a.shape[1]):
#         if b[i, j] == False:
#             a[i, j] = 0
# print()
# print("a=", a)

b = (a < 0.5)
a[b] = 0
print()
print("a=", a)
数组的空值nan

numpy中有一种特殊的值np.nan,它是一个空值,类似数据库中的Null,在实际应用中常常要找出控制的元素,可以使用numpy.isnan函数。
数组的np.nan值

import numpy as np
a = np.arange(6).reshape(2, 3)
print(a)
a = a.astype(np.float_)
a[0, 0] = np.nan
a[1, 1] = np.nan
print(a)
# 把np.nan数设置为0
b = np.isnan(a)
print(b)
a[b] = 0
print(a)
数组统计计算
import numpy as np
## 数组统计计算
# numpy定义了对数组的最大值max,最小值min,平均值mean,总和值sum等统计计算。如果a是一个shape(m, n)二维数组,以平均值mean为例,规则如下:
# numpy.mean(a, axis = 0)是对所有行元素进行平均值计算,结果是一个n个元素的数组,每个元素对应一列平均值。
# numpy.mean(a, axis = 1)是对所有列元素进行平均值计算,结果是一个m个元素的数组,每个元素对应一行平均值。
# 数组的max、min、mean、sum值

# a = np.arange(15)
# a = a.astype(np.float_)
a = np.random.randint(0, 5, (2, 3))
# a = a.reshape(3, 5)
print(a)
print("sum =", a.sum(axis=0))
print("mean =", a.mean(axis=0))
print("mean =", a.mean(axis=1))
print("max =", a.max())
print("min =", a.min())
数组数据排序
import numpy as np
# 数组数据排序
# 如果a是一个shape(m, n)的二维数组,排序规则如下:
# numpy.sort(a, axis=0)是固定任何一列,对所有的行的元素进行排序
# numpy.mean(a, axis=1)是固定任何一行,对所有的列的元素进行排序
a = np.array([[1, -1, 1, 0], [0, 1, 5, 2], [2, 5, -1, -3]])
print(a)
# [[ 1 -1  1  0]
#  [ 0  1  5  2]
#  [ 2  5 -1 -3]]
b = np.sort(a, axis=0)
print("axis=0 sort")
print(b)
# axis=0 sort
# [[ 0 -1 -1 -3]
#  [ 1  1  1  0]
#  [ 2  5  5  2]]
b = np.sort(a, axis=1)
print("axis=1 sort")
print(b)
# axis=1 sort
# [[-1  0  1  1]
#  [ 0  1  2  5]
#  [-3 -1  2  5]]
csv文件

使用numpy.loadtext函数读取这些数据
使用numpy.savetxt保存数据

import numpy as np
a = np.arange(6).reshape(2, 3)
print("a=", a)
np.savetxt("data.csv", a, delimiter=",")
b = np.loadtxt("data.csv", delimiter=",", dtype=np.int64)
print("b=", b)
# a= [[0 1 2]
#  [3 4 5]]
# b= [[0 1 2]
#  [3 4 5]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值