Numpy Arrays

list可以存储python中的任何对象作为其元素,但是在一个列表中基于元素的运算只能通过迭代循环(效率低下)来实现。
ndarray可以避免list的效率低下的缺点,narray类似于list,但是其存储类型的灵活性不如list一样好,只有同样的元素类型可以被存储在同一列
    e.g.第一列存储列表,第二列可以存储其他列表或者字典
array(in numpy)只能存储同一种类型的元素。
    e.g. 所有的元素必须是浮点型、整型或者字符串。

虽然有诸多限制,ndarray在进行多次运算的时候,运行速度仍有显著的提升。

arr=np.arange(1e5)#<class 'numpy.ndarray'>
larr=arr.tolist()
#list没有默认的广播功能,因此用list_times模拟ndarray所做。
def list_times(alist,scalar):
    for i,val in enumerate(alist):
        alist[i]=val*scalar
    return  alist

t1=timeit.Timer('arr * 1.1',setup='from __main__ import arr' )
print(t1.timeit(1))	#0.000534083869640842
t2=timeit.Timer('list_times(larr,1.1)',setup='from __main__ import list_times,larr')
print(t2.timeit(1))	#0.029095050097559593


当我们需要进行线性代数运算时,可以使用matrix(其可以避免使用ndarray的默认广播操作)
    ndarray*ndrray---A中的每个元素(i,j)*B中的每个元素(i,j)
    matrix*matrix---对A和B执行矩阵乘法运算
与ndarray不同,matrix最多只能是2维,如果试图构建一个3维或以上的是不可行的。

#create a 3D numpy array
arr=np.zeros((3,3,3))
#trying to convert array to a matrix,which will not work
mat=np.matrix(arr)#ValueError: shape too large to be a matrix.

2.1.1 Array Creation and Data Typing 有很多方法创建一个array。

#创建一个list,然后用array()进行封装
alist=[1,2,3]
arr=np.array(alist)

#创建一个有5个元素且都是0的数组
arr=np.zeros(5)

#创建一个从10到100的数组
arr=np.arange(10,100)


#创建一个元素为0的5*5的数组
image=np.zeros((5,5))


#创建一个元素为1的5*5*5的数组
#astype() 设置数组元素为整型
cube=np.zeros((5,5,5)).astype(int)+1

#元素为1,类型为float16的数组
cube=np.ones((5,5,5)).astype(np.float16)

#创建数组时,numpy默认数据类型精度为当前Python环境的位深度。如果使用64位的python,那么数组也会默认为64位精度。
#可以通过dtype= 设置元素类型(int, numpy.float16, numpy.float32, or numpy.float64)
#array of zero integers
arr=np.zeros(2,dtype=int)

#array of zero floats
arr=np.zeros(2,dtype=np.float32)

#我们也可以通过多种方法,对以上创建的数组进行改造。如果数组有25个元素,我们可以使其变为5*5的数组
#创建0-999的数组
arr1d=np.arange(1000)
#改造成10*10*10 的3D数组
arr3d=arr1d.reshape((10,10,10))#等同于arr3d=np.reshape(arr1d,(10,10,10))
#相反的也可以使一个10*10*10*10的变为1000*1
arr4d=np.zeros((10,10,10,10))
arr1d=arr4d.ravel()
print(arr1d)













#

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值