创建数组
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