numpy模块(2)

接着之前的文章,这次来了解下numpy的数据类型、基本运算、和切片。

数据类型

dtype(数据类型)是⼀个特殊的对象,它含有ndarray将⼀块内存解释为特定数据类型所需的信息。可以用dtype来查看数组类型、也可以采用astype来进行数据类型转换。

In	[33]:	arr1	=	np.array([1,	2,	3],	dtype=np.float64)
In	[34]:	arr2	=	np.array([1,	2,	3],	dtype=np.int32)
In	[35]:	arr1.dtype
Out[35]:	dtype('float64')
In	[36]:	arr2.dtype
Out[36]:	dtype('int32')
In	[37]:	arr	=	np.array([1, 2,	3, 4, 5])
In	[38]:	arr.dtype
Out[38]:	dtype('int64')
In	[39]:	float_arr	=	arr.astype(np.float64)
In	[40]:	float_arr.dtype
Out[40]:	dtype('float64')

注意:

整数被转换成了浮点数。如果将浮点数转换成整数,则⼩数部分将会被截取删除。

其支持的所有数据类型如下表所示:

numpy所支持的数据类型
类型类型代码说明
int8,uint8i1,u1有符号和无符号的8位(1个字节)整型
int16,uint16i2,u2有符号和无符号的16位(2个字节)整型
int32,uint32i4,u4有符号和无符号的32位(4个字节)整型
int64,uint64i8,u8有符号和无符号的64位(8个字节)整型
float16f2半精度浮点数
float32f4或f标准的单精度浮点数。与c的float兼容
float64f8或d标准的双精度浮点数。与C的double和Python的float对象兼容。
float128f16或g扩展精度浮点数
complex64、complex128、complex256c8、c16、c32分别用两个32位,64位或128位浮点数表示的附属
objectOPython对象类型
bool?存储True和False值得布尔类型
string_S固定长度的字符串类型(每个字符1个字节)
Unicode_U固定长度的Unicode类型(字节数由平台决定)

Numpy数组的基本运算

数组很重要,因为它使你不⽤编写循环即可对数据执⾏批量运算。NumPy ⽤户称其为⽮量化( vectorization )。⼤⼩相等的数组之间的任何算术运算都会将运算应⽤到元素级:
In	[51]:	arr	=	np.array([[1.,	2.,	3.], [4.,	5.,	6.]])
In	[52]:	arr
Out[52]:	array([[1.,	2.,	3.],
							[4., 5., 6.]])
In	[53]:	arr	*	arr
Out[53]:	
array([ 1.,	4.,	9.],
					[ 16., 25. , 36.]])
In	[54]:	arr	-	arr
Out[54]:	
array([[ 0., 0., 0.],
					[ 0., 0., 0.]])

数组与标量的算术运算会将标量值传播到各个元素:

In	[55]:	1	/	arr
Out[55]:	
array([[	1.	,	0.5	 ,	0.3333],
							[ 0.25	, 0.2 ,	0.1667]])
In	[56]:	arr	**	0.5
Out[56]:	
array([[	1. , 1.4142, 1.7321],
				[	2.	, 2.2361, 2.4495]])

Numpy基本的切片和索引

numpy的数组索引和切片大致类似与Python列表的功能差不多。

In	[60]:	arr	=	np.arange(10)
In	[61]:	arr
Out[61]:	array([0,	1,	2,	3,	4,	5,	6,	7,	8,	9])
In	[62]:	arr[5]
Out[62]:	5
In	[63]:	arr[5:8]
Out[63]:	array([5,	6,	7])
In	[64]:	arr[5:8]	=	12
In	[65]:	arr
Out[65]:	array([	0,	1,	2,	3,	4,	12,	12,	12,	8,  9])
#做一个array的切片
In	[66]:	arr_slice	=	arr[5:8]
In	[67]:	arr_slice
Out[67]:	array([12,	12,	12])
In	[68]:	arr_slice[1]	=	12345
In	[69]:	arr
Out[69]:	array([	0,	1,	2,	3,	4, 12,	12345, 12,	8, 9])
如上代码所示,当你将⼀个标量值赋值给⼀个切⽚时(如 arr[5:8]=12),该值会⾃动传播(也就说后⾯将会讲到的 ⼴播” )到整个选区。跟列表最重要的区别在于,数组切⽚是原始数组的视图。当修改其中的值,原数组也会发生变化。
In	[72]:arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
In	[73]:arr2d[2]
Out[73]:	array([7,	8,	9])
In	[74]:	arr2d[0][2]
Out[74]:	3
In	[75]:	arr2d[0,	2]
Out[75]:	3

对于⾼维度数组,能做的事情更多。在⼀个⼆维数组中,各索引位置上的元素不再是标量⽽是⼀维数组。因此,可以对各个元素进⾏递归访问,但这样需要做的事情有点多。你也可以传⼊⼀个以逗号隔开的索引列表来选取单个元素。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值