python小白之数组索引
Posted 扣子老三
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python小白之数组索引相关的知识,希望对你有一定的参考价值。
索引
numpy中的数组索引形式和Python是一致的。如:
np.arange(10)
print x[2] #单个元素,从前往后正向索引。注意下标是从0开始的。
print x[-2] #从后往前索引。最后一个元素的下标是-1
print x[2:5] #多个元素,左闭右开,默认步长值是1
print x[:-7] #多个元素,从后向前,制定了结束的位置,使用默认步长值
print x[1:7:2] #指定步长值
x.shape=(2,5) #x的shape属性被重新赋值,要求就是元素个数不变。2*5=10
print x[1,3] #二维数组索引单个元素,第2行第4列的那个元素
print x[0] #第一行所有的元素
y=np.arange(35).reshape(5,7) #reshape()函数用于改变数组的维度
print y[1:5:2,::2] #选择二维数组中的某些符合条件的元素
#python学习之数组 2018.4.17 # -*- coding: UTF-8 -*- from numpy import * import math A =arange(15).reshape(3,5)#reshape参数开头可以再加一个数字,表示reshape后生成的个数
print(A.sum(axis=0))#A列合计
print(A.min(axis=1))#A行最小值
print(A.cumsum(axis=1))#A中每行的累计和 print(A.shape)#A的形状 几行几列 print(A.ndim)#A的秩 即数组轴的个数 print(A.dtype.name)#查看array里面数据类型 print(A.itemsize)#数组中每个元素的字节大小int32/8=4 print(A.size)#数据元素个数 print(type(A))#A的类型为numpy.ndarray
# C=array([(1.5,2,3),(4,5,6)])#可以使用但是1.5,2,3等数字无法改变了C,所以不适用 # C=array([1.5,2,3],[4,5,6])#错误 C=array([[1.5,2,3],[4,5,6]],dtype=complex)#正确,并指定数组类型 print (C)
# print (zeros((3,4)))#一个三行四列都是0的数组 # print (ones((2,3,4),dtype=int16))#两个三行四列都是1的数组 print (empty((3,4)))#内容随机依赖内存状态的数组,默认都是float64
# set_printoptions(threshold=\'nan\')#表示强制打印整个数组,中间部分不会省略 D=array([1,2,3,4],dtype=int) print(D**2) print(D<2)
E=array([[1,1],[0,1]]) F=array([[2,0],[3,4]]) print(E*F)#矩阵对应位置相乘 print(dot(E,F))#矩阵乘法 print(linspace(0,pi,3,endpoint=False,retstep=True))#从0到pi之间均分,产生3个数,不包括末尾,返回数及间隔大小
#一维数组可以被索引、切片迭代 G=arange(10)**3 print(G[2:5])#输出2的3次方、3的3次方、4的三次方 G[:6:2]=-5#相当于G[0:6:2],是指从第0到6个数,变为-5,步长为2,即第一个=-5,第三个等于-5 print(G[::-1])#倒序输出
def f(x,y): return 10*x+y H=fromfunction(f,(5,4))#多维数组每个轴可以有索引
print(H[0:4,1])#第一行到第四行的第二列的数值输出 print(H[:,1])#第二列全部的数值输出 print(H[1:3,])#第二行到第三行的数值输出 print(H[-1])#相当于H[-1,:] #点(…)代表许多产生一个完整的索引元组必要的分号。如果x是秩为5的数组(即它有5个轴),那么: # x[1,2,…] 等同于 x[1,2,:,:,:], #x[…,3] 等同于 x[:,:,:,:,3] #x[4,…,5,:] 等同 x[4,:,:,5,:]. # for element in H.flat:#flag是数组的一个属性,可以用来对数组中元素运算 # print (element)
#向下取整floor() print(H.ravel())#将数组全展平
#复制与视图 #1.完全不拷贝 简单的赋值不拷贝数组对象或它们的数据。 a=arange(12) b=a print(b is a)
b.shape = 3,4 #2.视图和浅复制 不同的数组对象分享同一个数据 c的形状不会变化但数值会 c=a.view() print(c is a)
print(c.base is a)
c.shape = 2,6 print(a.shape) c[0,4]=12345 print(a)
#3.深复制 完全复制数组和它的数据 即两个数组完全独立开 d=a.copy() print(d is a) print(d.base is a) d[0,0]=-1 print(a)
#----------------------------------------------------------------- #numpy函数方法归类 #1.创建数组 arange array copy empty empty_like eye fromfile fromfunction identity, linspace, logspace, mgrid, ogrid, ones, ones_like, r , zeros, zeros_like #2.转化astype, atleast 1d, atleast 2d, atleast 3d, mat #3.操作array split, column stack, concatenate, diagonal, dsplit, dstack, hsplit, hstack, item, newaxis, ravel, repeat, reshape, resize, squeeze, swapaxes, take, transpose, vsplit, vstack #4.询问all, any, nonzero, where #5.排序argmax, argmin, argsort, max, min, ptp, searchsorted, sort #6.运算choose, compress, cumprod, cumsum, inner, fill, imag, prod, put, putmask, real, sum #7.基本统计cov, mean, std, var #8.基本线性代数cross, dot, outer, svd, vdot #--------------------------------------------------------------- #numpyj进阶 #花哨的索引NumPy比普通Python序列提供更多的索引功能。数组可以被整数数组和布尔数组索引。 k=arange(12)**2 i=array([1,1,3,8,5]) print(k[i])
#线性代数 #a=array([[2,3],[3,4]]) #inv(a)求逆 trace(a)求迹 a.transpose()转置 # solve(A,b) 求解AX=b # eigvals 求解特征值 # eig(C) 返回的c1是特征值 c2是特征向量 # U,sigma,V=np.linalg.svd(D,full_matric=false) svd奇异值分解 # pinv 广义逆 # det行列式 #矩阵类 #Amatrix(\'1.0 2.0;3.0 4.0\') #A.T L = arange(12) L.shape=3,4 print(L[:,[1,3]])
print(L[:,L[0,:]>1])#保留第一行大于1的列
print(L[L[:,0]>2,L[0,:]>1])#在矩阵两个方向有条件的切片
#技巧 L.shape=2,-1,3 #-1表示省略一个尺寸 将会自动推导 12个数 不知道要输出几行,但要输出3列 同时要输出两个 print(L)
建立数组
tip: 可以采用的形式from numpy import *+array~
import numpy as np+np.array
#常见错误 错误要点:array应该提供一个由数值组成的列表作为参数而不是用多个数值参数调用
# B=[[6,7],[8]] #这是list,而我们需要使用array
# B=array(6,7,8) #错 # B=array[6,7,8] # 错 # B=array[[6,7,8]] #错
B=array([6,7,8]) #对
以上是关于python小白之数组索引的主要内容,如果未能解决你的问题,请参考以下文章