Numpy 如何操作数组

简介: Numpy 如何操作数组

数组类型

Numpy类型image.png

# --*--coding:utf-8--*--
from numpy import *
"""
复数数组
"""
a = array([1 + 1j, 2, 3, 4])
# 数组类型
print('type:', a.dtype)
# 实部
print(a.real)
# 虚部
print(a.imag)
# 复共轭
print(a.conj())
"""
指定数组类型
"""
a = array([1, 2, 4, 9, 10], dtype=float32)
print(a)
a = array([0, 1.8, 3.3, 4.1], dtype=uint8)
print(a)
"""
类型转换
"""
a = array([1.5, -3, -3.3],
         dtype=float32)
b = asarray(a, dtype=float64)
print('asarray类型转换:', b)
c = a.astype(uint8)
print('astype类型转换:', c)
a = array((1,2,3,4), dtype=int32)
d = a.view(uint8)
print('view类型转换:', d)

数组方法

# --*--coding:utf-8--*--
from numpy import *
from numpy.random import rand
"""
求和
"""
a = array([[1,2,3], [4,5,6]])
# 所有元素和
print('all:', sum(a))
# 指定求和维度
print('维度和:', sum(a, axis=0))
print('维度和:', sum(a, axis=-1))
"""
求积
"""
# 所有元素积
print('all:', prod(a))
# 指定求积维度
print('维度积:', prod(a, axis=0))
print('维度积:', prod(a, axis=1))
"""
最大最小值
"""
a = rand(3, 4)
print(a)
# 全局最小
print('all:', a.min())
# 某个轴最小
print('axis:', a.min(axis=1))
# 全局最大
print('all:', a.max())
# 某个轴最大
print('axis:', a.max(axis=-1))
# 最大最小值的位置
print('max in: ', a.argmax())
print('min in ', a.argmin())
"""
均值
"""
a = array([[1,2,3],[4,5,6]])
print('avg:', a.mean())
print('avg: ', average(a, axis=0))
"""
标准差
"""
# 标准差
print('std: ', a.std(axis=1))
# 方差
print(a.var(axis=1))
print(var(a, axis=-1))
print(std(a, axis=-1))
# clip方法,将数值限制在某个范围
print(a)
# 小于2的变成2,大于4的变成4
print(a.clip(2, 4))
# ptp方法,计算最大值和最小值之差
print(a.ptp(axis=1))
print(a.ptp())
# round方法
a = array([1.35, 2.5, 1.5])
print(a.round())
# 近似到一位小数
print(a.round(decimals=1))

数组排序

# --*-- coding:utf-8 --*--
from numpy import *
"""
数组排序
"""
# sort函数
names = array(['Bob', 'Sue', 'Jan', 'Ad'])
print('names sort:', sort(names))
weights = array([20, 93, 53, 62])
print('weights sort:', sort(weights))
# argsort函数
ordered_indices = argsort(weights)
print(ordered_indices)
print(weights[ordered_indices])
"""
二维数组排序
"""
a = array([
        [.2, .1, .5],
        [.4, .8, .3],
        [.9, .6, .7]
    ])
print('all: \n', sort(a))
print('axis: \n', sort(a, axis=0))
"""
searchsorted函数,接受两个参数,第一个必须是已排序的数组
"""
sorted_array = linspace(0, 1, 5)
values = array([.1, .8, .3, .31, .9, .45])
print('searcgsorted: ', searchsorted(sorted_array, values))

数组形状

"""
数组形状
"""
# --*-- coding:utf-8 --*--
from numpy import *
# 修改数组形状
a = arange(6)
print('origin: \n', a)
a.shape = 2, 3
print('after modified: \n', a)
print('after reshape: \n', a.reshape(3, 2))
# 使用newaxis增加数组维数
a = arange(3)
print('shape:', shape(a))
y = a[newaxis, :]
print(shape(y))
print(y)
y = a[newaxis, newaxis, :]
print(shape(y))
print(y)
# squeeze方法去除多余的轴
a = arange(6)
a.shape = (2, 1, 3)
b = a.squeeze()
print('shape of b:', b.shape)
# 数组转置
"""
PS:
    1、对于复述数组,转置不返回复共轭,只是单纯交换轴的位置
    2、转置可以作用于多维数组
"""
print(a)
print('transpose: \n', a.transpose())
print(a.T)
# 数组连接
x = array([
        [0,1,2],
        [10,11,12]
    ])
y = array([
        [50,51,52],
        [60,61,62]
    ])
z = concatenate((x, y))
print(z)
# Flatten数组,将多维数组转化为1维数组,返回数组的复制,不改变原数组的值
a = array([[0,1],
           [2,3]])
b = a.flatten()
print(b)
# flat属性,相当于返回所有元组组成的一个迭代器
print(a.flat)
# reval方法,将多位数组转化为1维数组
b = a.ravel()
print(b)
# atleast_xd函数,保证数组至少有x维
x = 1
print('1d:',atleast_1d())
a = array([1,2,3])
b = atleast_2d(a)
print('2d:', b)
c = atleast_3d(b)
print('3d: ', c)

对角线

# --*--coding:utf-8--*--
import numpy as np
"""
对角线
"""
a = np.array([11,22,33,44,55,66,77,88,99])
a.shape = 3, 3
print(a)
# 对角线元素
print('all :\n', a.diagonal())
# 对角线元素偏移,正数代表右移,负数代表左移
print('左移:\n', a.diagonal(offset=-1))
print('右移:\n', a.diagonal(offset=1))
# 更新对角线的值
i = [0, 1, 2]
a[i, i] = 20
print('update: \n', a)
# 修改次对角线的值
i = np.array([0, 1])
a[i, i+1] = 21
print('修改次对角线:\n', a)

数组与字符串的转换

# --*--coding:utf-8--*--
import numpy as np
"""
数组与字符串的转换
"""
# tostring方法
a = np.array([[1, 2], [3, 4]], dtype = np.uint8)
print('a: ', a.tostring())
# 按照列读取数据
print('a Fortran:', a.tostring(order='F'))
# fromstring函数,从字符串中独处数据,但要指定类型
s = a.tostring()
a = np.fromstring(s, dtype=np.uint8)
a.shape = 2, 2
print(a)

生成数组的函数

# --*--coding:utf-8--*--
import numpy as np
"""
生成数组的函数
"""
# arange(start, stop=None, step=1, dtype=None),类似range函数,返回数组
# 允许非整数值输入,产生一个菲整形的数组
a = np.arange(5)
print(a)
# linspace(start, stop, N),产生N个等距分布与【】
print(np.linspace(0, 10, 5))
# logspace(start, stop, N),产生N个对数等距分布的数组,默认以10为底
print(np.logspace(0, 8, 5))
# meshgrid,二维平面中生成一个网格
x_lable = np.linspace(-1, 1, 5)
y_lable = np.linspace(-1, 1, 5)
x, y = np.meshgrid(x_lable, y_lable)
print(x, y, end='\n')
# 1、ogrid(start:end:step):meshgrid(indexing='ij', sparse=True),生成列矩阵
# 2、mgrid(start:end:step): meshgrid(indexing='ij', sparse=False),生成行矩阵
x, y = np.ogrid[-10:10:5, 10:30:5]
print('{} \n {}'.format(x, y))
# r_:产生行向量
# c_:产生列向量
print(np.r_[1:10:2])
print(np.c_[1:10:2])
# ones(shape, dtype),定制一个全1的数组,数组类型可指定
# zeros(shape, dtype),定制一个全0的数组,数组类型可指定
# empty(shape, dtype, order),产生一个指定大小的数组(指向的内存未初始化,故值随机)
print('全1:\n', ones([3, 5], dtype = np.float32))
print('全0:\n', zeros([3, 5], dtype = np.float32))
print(np.empty(5))
# empty_like(array)、ones_like(array)、zeros_like(array),产生一个与a大小一样,类型一样的对应数组
a = np.arange(0, 10, 2)
print(a)
print('empty like:\n', np.empty_like(a))
print('zeros like:\n', np.zeros_like(a))
print('ones like:\n', np.ones_like(a))
# identity(n, dtype),产生一个n*n的单位矩阵
print('identity: \n', np.identity(5))
目录
相关文章
|
3月前
|
Ubuntu Linux 计算机视觉
NumPy 秘籍中文第二版:二、高级索引和数组概念
NumPy 秘籍中文第二版:二、高级索引和数组概念
52 0
|
3月前
|
存储 算法 数据挖掘
NumPy 数组学习手册:6~7
NumPy 数组学习手册:6~7
38 0
|
2月前
|
存储 索引 Python
一文掌握python数组numpy的全部用法(零基础学python(二))
一文掌握python数组numpy的全部用法(零基础学python(二))
28 0
|
5天前
|
存储 算法 数据处理
《Numpy 简易速速上手小册》第3章:Numpy 数组操作与变换(2024 最新版)
《Numpy 简易速速上手小册》第3章:Numpy 数组操作与变换(2024 最新版)
28 0
|
5天前
|
存储 数据采集 数据挖掘
《Numpy 简易速速上手小册》第2章:Numpy 数据类型和数组构造(2024 最新版)
《Numpy 简易速速上手小册》第2章:Numpy 数据类型和数组构造(2024 最新版)
24 0
|
6天前
|
存储 机器学习/深度学习 数据挖掘
自定义数据类型与NumPy结构数组详解
【4月更文挑战第17天】本文详细介绍了NumPy中的自定义数据类型和结构数组。通过`numpy.dtype`可创建自定义数据类型,如示例中的包含整数和浮点数字段的数组。结构数组能存储不同类型的元素,每行作为一个记录,包含多个字段。创建结构数组时,定义字段及其数据类型,然后通过字段名进行访问和操作。掌握这些技术能提升数据处理效率和灵活性,尤其在科学计算和数据分析领域。
|
6天前
|
搜索推荐 数据挖掘 数据处理
NumPy数组统计与排序方法全览
【4月更文挑战第17天】本文介绍了NumPy在Python中的数组统计和排序功能。主要包括计算平均值、标准差和方差的`np.mean()`, `np.std()`, `np.var()`方法,以及求最大值、最小值、百分位数的功能。在排序方面,讲解了基本排序的`np.sort()`,获取排序索引的`np.argsort()`,逆序排序和随机排序的方法。这些工具对于数据分析和科学计算十分实用,能有效提升数据处理效率。
|
6天前
|
存储 数据处理 Python
NumPy数组运算:元素级与广播机制剖析
【4月更文挑战第17天】NumPy是Python数值计算库,提供元素级运算和广播机制。元素级运算针对数组每个元素单独计算,如加法、减法等;广播机制允许不同形状数组间运算,通过扩展小数组形状匹配大数组。了解这两点能帮助更好地运用NumPy进行数值计算和数据处理。
|
6天前
|
存储 索引 Python
深入解析NumPy数组的形状与重塑
【4月更文挑战第17天】本文深入解析了NumPy数组的形状和重塑。数组形状是表示数组维度和大小的元组,可通过`shape`属性获取。重塑允许改变数组形状而不改数据,需保证元素总数不变。`reshape`方法用于重塑,其中`-1`可让NumPy自动计算尺寸。注意重塑遵循元素总数相等、仅一次`-1`、内存存储顺序及返回新数组的原则。理解和掌握这些概念对高效使用NumPy处理多维数组至关重要。
|
2月前
|
C++ 索引 Python
Python Numpy入门基础(二)数组操作
Python Numpy入门基础(二)数组操作
25 0