NumPy数据类型
简写 | 名称 | 解释 |
---|---|---|
i | integer | 整数型 |
b | boolean | 布尔型 |
u | unsigned integer | |
f | float | 浮点型 |
c | complex float | |
m | timedelta | |
M | datetime | |
O | object | |
S | string | 字符型 |
U | unicode string | |
V | fixed chunk of memory for the other type |
NumPy中一些数据类型操作
##利用dtype查看数据类型
import numpy as np
arr=np.array([1,2,3,4])
print(arr.dtype)#结果为int64
arr=np.array(['a','b','c'])
print(arr.dtype)#结果为<U1
#利用dtype指定数据类型
arr=np.array([1,2,3,4],dtype='S')
print(arr.dtype)#结果为|S1
#用astype更改数据类型
newarr=arr.astype('i')#将arr数据类型更改为整数型然后重新复制给new.arr,newarr与arr的内容一致但数据类型不同
print(newarr.dtype)#结果为int32
NumPy中的copy和view
copy是复制一个array,复制后新旧array无关
view是建立软链接,新旧array绑定
用base属性可查看某个array是copy还是view
import numpy as np
arr=np.array([1,2,3,4])
arr1=arr.copy()
print(arr1)#结果为[1 2 3 4]
arr2=arr.view()
print(arr2)#结果为[1 2 3 4]
arr[1]=100
print(arr)#结果为[1 100 3 4]
print(arr1)#结果为[1 2 3 4]
print(arr2)#结果为[1 100 3 4]
##用bash查看array为copy还是view,如果为copy则返回None,如果为view则打印array
print(arr.base)#结果为None
print(arr1.base)#结果为None
print(arr2.base)#结果为[1 100 3 4]
NumPy Array Shape
NumPy中array的shape是指每个维度的元素个数,利用shape获取array的shape,利用reshape可改变array的shape
import numpy as np
arr1=np.array([1,2,3,4,5,6,7,8,9,10,11,12])
print(arr1.shape)#结果为(12,)
arr2=np.array([[1,2,3,4,5,6],[7,8,9,10,11,12]])
print(arr2.shape)#结果为(2,6)
arr3=np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(arr3.shape)#结果为(2,2,3)
#shape结果返回一个包含每个维度元素个数的元祖,第一个数字代表array的第一维度种元素个数,array中第一个维度是指最外层维度,所有维度数的乘积为array中总元素数。
#利用reshape改变array的shape
arr1=np.array([1,2,3,4,5,6,7,8,9,10,11,12])
#将1-D array变为2-D array,reshape中指定2-D array的shape
arr2=arr1.reshape(2,6)
print(arr2)#结果为[[1 2 3 4 5 6] [7 8 9 10 11 12]]
#将1-D array变成3-D array,reshape中指定3-D array的shape
arr3=arr1.reshape(2,2,3)
print(arr3)#结果为[[[ 1 2 3] [ 4 5 6]] [[ 7 8 9] [10 11 12]]]
#将array直接压扁为1-D array
newarr=arr3.reshape(-1)
print(newarr)#结果为[1 2 3 4 5 6 7 8 9 10 11 12]
NumPy Array Iterating数组迭代
用for在循环访问数组中的元祖,对于N维数组,for循环可以直接访问N-1层维度的每个元素。
##NumPy Array Iterating基础用法
import numpy as np
arr1=np.array([1,2,3,4,5,6,7,8,9,10,11,12])
for a in arr1:
print(a)#结果为1 2 3 4 5 6 7 8 9 10 11 12
arr2=np.array([[1,2,3,4,5,6],[7,8,9,10,11,12]])
for a in arr2:
print(a)
for b in a:
print(b)#结果为[1 2 3 4 5 6] 1 2 3 4 5 6 [7 8 9 10 11 12] 7 8 9 10 11 12
arr3=np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
for a in arr3:
print(a)
for b in a:
print(b)
for c in b:
print(c)
#结果为[[1 2 3] [4 5 6]] [1 2 3] 1 2 3 [4 5 6] 4 5 6 [[7 8 9] [10 11 12]] [7 8 9] 7 8 9 [10 11 12] 10 11 12
##用nditer()直接遍历N维数组内部每个元素,不需要进行多次for循环
arr3=np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
for i in np.nditer(arr3):
print(i)#结果为1 2 3 4 5 6 7 8 9 10 11 12
#nditer()遍历数组时可更改数组元素的数据类型,但不会更改原本的数组内部的数据类型,因此需要额外的空间来执行此操作,额外的空间被称作buffer,因此需要传递flags=['buffered']
arr=np.array([1,2,3])
for i in np.nditer(arr,flags=['buffered'],op_dtypes=['S']):
print(i)
print(i.dtype)
#结果为b'1' |S21 b'2' |S21 b'3' |S21
#同时获得array中的元素索引和元素内容
arr1=np.array([1,2,3])
arr2=np.array([[1,2],[3,4]])
arr3=np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
for idx,x in np.ndenumerate(arr1):
print(idx,x)
#结果为(0,) 1 (1,) 2 (2,) 3
for idx,x in np.ndenumerate(arr2):
print(idx,x)
#结果为(0, 0) 1 (0, 1) 2 (1, 0) 3 (1, 1) 4
for idx,x in np.ndenumerate(arr3):
print(idx,x)
#结果为(0, 0, 0) 1 (0, 0, 1) 2 (0, 1, 0) 3 (0, 1, 1) 4 (1, 0, 0) 5 (1, 0, 1) 6 (1, 1, 0) 7 (1, 1, 1) 8
原文始发于微信公众号(BioInfo):W3Schools-NumPy系列2
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/238164.html