标签:upload qualifier audio rdp rate minus title pinterest ppi
import numpy
numpy.__version__
import numpy as np
与C语言不同, Python是动态语言。
在C语言中,变量的数据类型是事先声明好的,在Python中变量的类型是动态推测出来的。
Python的变量不仅仅是值,还包含其他的信息。
例如:Python中的整型数值不仅仅是个整型。Python是用C实现的,Python的对象就是C的结构的伪装,不仅仅包含值,还包含其他信息。
x = 10000,这里x不仅仅是个整数,它的结构大约是这样的:
struct _longobject {
long ob_refcnt;
PyTypeObject *ob_type;
size_t ob_size;
long ob_digit[1];
};
Python中的整型包括4部分:
C和Python中int的对比图
其中PyObject_HEAD就包含在reference count、type code和前边提到的其他的信息。
Python的List可以是异构的:
L = [True, 3, "Hello"]
Python的List的这种特点也是有代价的,List里面的每一项都有自己的类型信息、reference count和其他信息。所以每一项都是一个完整的python对象。
但是在特殊的情况下,例如,List里面所有的项的类型都是一样的话,那这些信息就太多余了,所以一个固定类型的数组(例如Numpy的数组)会更有效率。
在实现上:这种数组应该是由一个指针指向连续的数据块;而Python的List则是一个指针指向一堆指针,这些指针每个都指向一个完整的python对象。
Numpy的数组确实缺少了这种灵活,但是对于数据的存储和操作却更有效率。
python有一个内置的array模块,可以用来创建同一类型的数组。
import array
L = list(range(10))
A = array.array(‘i‘, L) ### i是类型代码,表示是整型
A
python的array为数组类型的数据提供了有效率的存储。而Numpy的ndarray还能对数据进行更有效率的操作。
可以使用np.array这个函数。
np.array([1, 2, 3, 4, 5])
和python的List不一样,numpy数组的数据类型必须是一样的。如果类型不一样,那么numpy会尽力去向上转型(如果可能的话)。例如:
np.array([3.14, 4, 14])
可以使用dtype这个关键字:
np.array([1, 2, 3], dtype=‘float32‘)
这点和python的list不一样。
np.array([range(i, i + 3) for i in [2, 4, 6]])
np.zeros(10, dtype=int) # 长度为10的,都是0的数组。
np.ones((3, 5), dtype=float) # 3 x 5维的成员都是1,类型是float的二维数组。
np.full((3, 5), 3.14) # 3x5数组,成员都是3.14
np.arange(0, 20, 2.2) # 与python的range类似,但允许小数步长。
np.linspace(0, 1, 5) # 数组的成员是从0到1把区间平均分成5-1份的值
np.random.random((3, 3)) # 3x3均匀分布的,值是0到1的随机数组
np.random.normal(0, 1, (3, 3)) # 3x3正态分布的随机值数组,平均值为0,标准差为1
np.eye(3) # 3x3单位矩阵
np.empty(3) # 创建一个有三个整型但未初始化的数组,其元素的值就是那个位置的内存上恰好存在的数据。
当创建数组的时候,可以通过字符串或者numpy的对象来指定类型:
np.zeros(10, dtype=‘int16‘);
np.zeros(10, dtype=np.int16);
numpy的数据类型:
每个numpy数据都有这几个属性:
np.random.seed(0) # seed for reproducibility
x1 = np.random.randint(10, size=6)
x2 = np.random.randint(10, size=(3, 4))
x3 = np.random.randint(10, size=(3, 4, 5))
print("x3 ndim: ", x3.ndim)
print("x3 shape:", x3.shape)
print("x3 size: ", x3.size)
print("x3 dtype: ", x3.dtype)
print("itemsize: ", x3.itemsize, "bytes")
print("nbytes: ", x3.nbytes, "bytes")
x = [1, 2, 3, 4, 5]
x[2]
x[-1] # 最后一个元素
x2 = np.array([[1,2,3,4], [5,6,7,8], [3,4,5,6]])
print(x2)
print(x2[0, 0])
print(x2[2, -1])
记住,numpy数组的数据类型是一定的,如果你向一个整数数组插入一个浮点类型的数据,那么这个数据会被截断的。
x2[0] = 3.14159
x2
numpy数组切割需要使用切割符号,也就是冒号 :。形式如下:
x[开始:结束:步长]
如果这里有任何一个参数没有填写,那么他们的默认值分别是:
开始=0,结束=数组的长度,步长=1
x = np.arange(10)
print(x)
print(x[:4])
print(x[4:])
print(x[4:7])
print(x[::2])
print(x[1::2])
print(x[::-1]) # 所有元素倒序
print(x[5::-2]) # 从索引5各数倒序
x2
x2[:2, :3] # 前两行,前三列
x2[:, ::2] # 所有的行,隔列选取
x2[::-1, ::-1] # 行列都倒序
# 访问行或列
x2[:, 2] # 第一列
x2[0, :] # 第一行
numpy数组的切割默认返回的是视图而不是数据的拷贝,这一点跟python的list不同,pythonlist默认进行数据的拷贝。
x2
x2_sub = x2[:2, :2]
x2_sub
x2_sub[0, 0] = 100
print(x2)
需要对数组/子数组进行拷贝的话,就需要调用copy()方法。
x2
x2_sub_cp = x2[:2, :2].copy()
x2_sub_cp
x2_sub_cp[0, 0] = 99
print(x2_sub_cp)
print(x2)
grid = np.arange(1, 10).reshape((3, 3))
grid
这里的要求是第一个数组的size和reshape后的size要一致。
在可能的情况下,reshape方法会尽量使用第一个数组的视图而不是复制它,但是对于非连续的内存缓冲区,这就不一定了。
x = np.array([1,2,3])
x.reshape(1, 3) # 把一维数组变成 1x3二维数组
这里也可以在切割操作中使用np.newaxis这个关键字,来达到同样的效果
x[np.newaxis, :]
np.newaxis可以这样理解:x的原来的shape是(3,),使用切割操作创建数组,如果newaxis出现在第一个位置,那么新数组的shape就是x的shape左边加上1维:(3,) => (1, 3);如果newaxis出现在第二个位置,那么就是 (3,) => (3, 1)
x[:, np.newaxis]
x = np.array([1, 2, 3])
y = np.array([3, 2, 1])
print(np.concatenate([x, y]))
z = [99, 99, 99]
print(np.concatenate([x, y, z]))
grid = np.array([[1, 2, 3], [4, 5, 6]])
np.concatenate([grid, grid]) # 沿着第一轴
np.concatenate([grid, grid], axis=1) # 沿着第二轴
可以使用np.vstack(垂直)或np.hstack(水平)
x = np.array([1, 2, 3])
grid = np.array([[9, 8, 7], [6, 5, 4]])
y = np.array([[99],[99]])
print(np.vstack([x, grid]))
print(np.hstack([y, grid]))
np.dstack 沿着第三轴进行连接
x = [1, 2, 3, 99, 99, 3, 2, 1]
x1, x2, x3 = np.split(x, [3, 5])
print(x1, x2, x3)
N个分割点会出现N+1个子数组。
np.vsplit和np.hsplit也类似:
grid = np.arange(16).reshape((4, 4))
grid
upper, lower = np.vsplit(grid, [2])
print(upper)
print(lower)
left, right = np.hsplit(grid, [2])
print(left)
print(right)
np.dsplit 会沿着第三轴进行分割。
标签:upload qualifier audio rdp rate minus title pinterest ppi
原文地址:http://www.cnblogs.com/cgzl/p/7630065.html