最近太忙太忙,停更了一段时间
还是放慢一下步子,整理一下
我用来学习的是Py3版本
这里面有的是用Py2写的,有用到的区别自己查一下
1.纯python运算和Numpy库运算比较
#关于向量相加的两种方法及其用时
from datetime import datetime
import time
import numpy as np
#向量相加-Python
def pythonsum(n):
a = list(range(n))
print(type(a))
b = list(range(n))
c = []
for i in range(len(a)):
a[i] = i ** 2
b[i] = i ** 3
c.append(a[i] + b[i])
return c
#向量相加-NumPy
def numpysum(n):
a = np.arange(n) ** 2
print(type(a))
b = np.arange(n) ** 3
c = a + b
return c
#效率比较
size = 10
#pythonsum函数用时
start_time = datetime.now()
v = pythonsum(size)
print(v)
end_time = datetime.now()
detal = end_time - start_time
print("倒数两个数字是:",v[-2:])
print("pythonsum函数所用时间是:",detal.microseconds)
#numpysum函数用时
start_time = datetime.now()
f = numpysum(size)
print(f)
end_time = datetime.now()
detal = end_time - start_time
print("倒数两个数字是:",v[-2:])
print("pythonsum函数所用时间是:",detal.microseconds) #微秒
#可以得出结论:用numpy库来计算比用纯python运算速率更快
'''
需要注意的是:
#向量相加-Python
def pythonsum(n):
a = list(range(n))
b = list(range(n))
c = []
for i in range(len(a)):
a[i] = i ** 2
b[i] = i ** 3
c.append(a[i] + b[i])
return c
在这个函数中,不能写成:
a = range(n)
b = range(n)
他们生成的是一个 range object
他们并没有直接返回一个list [ , , , ]
所以需要强制转换成 a = list(range(n))
b = list(range(n))
而对于numpy库中的arange()函数,它生成一个ndarray多维数组
如:
>>> import numpy as np
>>> np.arange(3)
array([0, 1, 2])
>>>
'''
2.数组的创建
#数组的创建
import numpy as np
#numpy数组 arange
a = np.arange(5)
print(a.dtype) #看一下数组的类型dtype<'int32'>, big-endian 4*8 = 32位的数据类型
print(a)
print(a.shape) #看一下数组的维度,,返回一个元组(5,)
#创建多维数组 array
m = np.array([np.arange(2),np.arange(2)])
print(m)
print (m.shape)
print (m.dtype)
n = np.ones_like(m)#创建一个类似于m的数组
print("n",n)
print("\n")
print("***********************************")
#zeros()函数创建数组
print(np.zeros(10))
print(np.zeros((3, 6)))#3x6
print(np.empty((2, 3, 2)))#返回一个空数组,里面是一些垃圾数,而不是一个全为0的数组,
print(np.arange(15))
#eye 生成NxN的单位矩阵
y = np.eye(5)
print(y)
#identity 生成NxN的单位矩阵
z = np.identity(2)
print(z)
print("***********************************")
#asarray
w = np.asarray([np.arange(2),np.arange(2)])
print(w)
3.Numpy的数据类型
#numpy数据类型
import numpy as np
print ("In: float64(42)")
print (np.float64(42))
print ("In: int8(42.0)")
print (np.int8(42.0))
print ("In: bool(42)")
print( np.bool(42))
print (np.bool(0))
print ("In: bool(42.0)")
print( np.bool(42.0))
print ("In: float(True)")
print( np.float(True))
print (np.float(False))
print( "In: arange(7, dtype=uint16)")
print( np.arange(7, dtype=np.uint16))
print( "In: int(42.0 + 1.j)")
try:
print( np.int(42.0 + 1.j)) #1.j复数类型
except TypeError:
print( "TypeError")
#Type error
print ("In: float(42.0 + 1.j)")
print (float(42.0 + 1.j))
#Type error
#float无法将一个复数类型转换,报错之后,后面的代码不执行了
a = 1.5j
print(a)
4.数据类型转换
# 数据类型转换
arr = np.array([1, 2, 3, 4, 5])
arr.dtype
float_arr = arr.astype(np.float64)
float_arr.dtype
arr = np.array([3.7, -1.2, -2.6, 0.5, 12.9, 10.1])
arr
arr.astype(np.int32)
numeric_strings = np.array(['1.25', '-9.6', '42'], dtype=np.string_)
numeric_strings.astype(float)
6.数据类型对象
#数据类型对象
a = np.array([[1,2],[3,4]])
print a.dtype.byteorder
print a.dtype.itemsize
7.字符编码
#数据类型对象
a = np.array([[1,2],[3,4]])
print a.dtype.byteorder
print a.dtype.itemsize
#字符编码
print np.arange(7, dtype='f')
print np.arange(7, dtype='D')
print np.dtype(float)
print np.dtype('f') #单精度
print np.dtype('d') #双精度
print np.dtype('f8') #双精度
print np.dtype('Float64')#双精度