numpy数组创建、切片、索引、属性

创建数组

import numpy as np
#指定大小,未初始化的数据
c = np.empty([2,3])
#array([[8.2e-322, 0.0e+000, 0.0e+000],
#       [0.0e+000, 0.0e+000, 0.0e+000]])
#指定大小,数据以0填充,dtype默认为float
d = np.zeros([2,3],dtype=np.int)
#array([[0, 0, 0],
#       [0, 0, 0]])
d = np.zeros([2,3])#默认数据类型为float
#array([[0., 0., 0.],
#       [0., 0., 0.]])
d = np.zeros(2)
#array([0., 0.])
d = np.zeros((2,))
#array([0., 0.])
# 自定义类型
d = np.zeros((2,2), dtype = [('x', 'i4'), ('y', 'i4')])
#[[(0, 0) (0, 0)]
# [(0, 0) (0, 0)]]
#指定大小,用1填充
z = np.ones([2,3])
#array([[1., 1., 1.],
#       [1., 1., 1.]])

根据已有数组创建数组

import numpy as np
x =  [(1,2,3),(4,5)] 
a = np.asarray(x)
#array([(1, 2, 3), (4, 5)], dtype=object)
# 设置dytpe
x = [1,2,3,4]
z = np.asarray(x,dtype=float)
z 

x =  [[1,2,3],[4,5]] 
a = np.asarray(x,dtype =  float)
a 
#ValueError: setting an array element with a sequence.

#根数数据流创建输出,如果数据流是字符串时,字符串需要加b‘字符串’,因为python字符串时unicode,要转换为bytestring。
x = b'wudidahaoren'
a = np.frombuffer(x, dtype =  'S2') 
a 
#array([b'wu', b'di', b'da', b'ha', b'or', b'en'], dtype='|S2')

#根据可迭代对象创建数据
a = range(10)
b = iter(a)
z = np.fromiter(b,dtype=np.float)
z 
#array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])

从数值范围创建数据

a = np.arange(0,10,2,dtype=np.int)
a
#array([0, 2, 4, 6, 8])
#numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)生成一个一维数组,数组是一个等差数列,start开始值,stop结束值,num数量,endpoint包含结束值,retstep显示步长
a = np.linspace(1,10,4,dtype=np.int,retstep=True)
a 
#(array([ 1,  4,  7, 10]), 3.0)
a = np.linspace(1,100,30,dtype=np.int,retstep=True)
a 
#(array([  1,   4,   7,  11,  14,  18,  21,  24,  28,  31,  35,  38,  41,
#         45,  48,  52,  55,  59,  62,  65,  69,  72,  76,  79,  82,  86,
#         89,  93,  96, 100]), 3.413793103448276)

#numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)base对数 log 的底数。
a = np.logspace(1.0,  2.0, num =  10) 
#[ 10.           12.91549665     16.68100537      21.5443469  27.82559402      
#  35.93813664   46.41588834     59.94842503      77.42636827    100.    ]
a = np.logspace(0,9,10,base=2)
#[  1.   2.   4.   8.  16.  32.  64. 128. 256. 512.]

数组切片

import numpy as np
a = np.arange(1,10,2)
#array([1, 3, 5, 7, 9])
a[2:5:2]
#array([5, 9])

a = np.array([[1,2,3],[3,4,5],[4,5,6]])
a
#array([[1, 2, 3],
#       [3, 4, 5],
#       [4, 5, 6]])
a[1:]    #等于a[1:,:],等于a[1:,...]。 ...使选择元组的长度与数组的维度相同
#array([[3, 4, 5],
#       [4, 5, 6]])

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

#数组还可以通过整数索引提取数据
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
#提取四个角的元素
b = a[[0,0,2,2],[0,2,0,2] #第一个list是行坐标,第二个list是列坐标
#array([1, 3, 4, 6])

#布尔索引
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
c = a[a>4]
#array([5, 5, 6])

#取反索引
a = np.array([np.nan,  1,2,np.nan,3,4,5])
c = a[~np.isnan(a)]
c 

#按我们要求选取行,再按顺序将列排序,获得一个矩形
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
b = a[[0,2],:][:,[1,2]]
#array([[2, 3],
#       [5, 6]])
#等同于np.ix_([0,2],[1,2]),意思是将两个数组做笛卡尔积,然后取值,选取方形区域的索引器.即(0,1),(0,2),(2,1),(2,2)
b = a[np.ix_([0,2],[1,2])]
b
#array([[2, 3],
#       [5, 6]])

数组属性

import numpy as np
a = np.array([[1,2,3,4],[5,6,7,8]])
#数据维度
a.ndim
#2
#数组形状
a.shape
#(2,4)
#改变数组形状(a的形状没有改变,重新生成一个array赋值给b)
b = a.reshape((4,2))
b
#元素个数
a.size
#8

引用

https://www.runoob.com/
np.ix_

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值