02_Numpy

Numpy(Numerical Python)

数字化的python
是一个开源的Python科学计算库,用于快速处理任意维度的数组。
快速的原因:
1st:内存块风格:ndarray中的所有元素的类型都是相同的,所以ndarray在存储元素时内存可以连续
2nd:ndarray支持并行化运算(向量化运算)
3rd: 效率远高于纯Python代码
Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,所以,其效率远高于纯Python代码。

1-array和asarray的区别

array数组

eg1:

import numpy as np
data1=[[2, 2, 2], [1, 1, 1], [0, 0, 0]]
arr2 = np.array(data1)
arr3 = np.asarray(data1)
print(arr2)
print(type(arr2))
print(arr3)
print(type(arr3))
---------------------------------------------
[[2 2 2]
 [1 1 1]
 [0 0 0]]
<class 'numpy.ndarray'>
[[2 2 2]
 [1 1 1]
 [0 0 0]]
<class 'numpy.ndarray'>

这里看到结果相同,都对复制元数据

eg2:

arr = np.ones((3, 3))
arr0 = np.array(arr)
# 相当于索引的形式,并没有真正的创建一个新的
arr1 = np.asarray(arr)
arr[1] = 333
print(arr0)
print(type(arr0))
print(arr1)
print(type(arr1))
--------------------------------------------
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
<class 'numpy.ndarray'>
[[  1.   1.   1.]
 [333. 333. 333.]
 [  1.   1.   1.]]
<class 'numpy.ndarray'>

随着对元数据更改,asarray的数据随之改变

二者定义

np.asarray

def asarray(a, dtype=None, order=None):
    return array(a, dtype, copy=False, order=order)

np.array

def array(a, dtype=None, order=None):
    return array(a, dtype, copy=True, order=order)

np.array(默认情况下)将会copy该对象

2-ndarray的形状

# 创建不同形状的数组
a = np.array([[1,2,3],[4,5,6]])
b = np.array([1,2,3,4])
c = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])
print(a.shape)
print(b.shape)
print(c.shape)
-------------------------------------------------
(2, 3)  # 二维数组
(4,)    # 一维数组
(2, 2, 3) # 三维数组

3-记得有一道面试题如下:

问题:利用numpy随机初始化正太分布数组或者一个二维矩阵,并 一句代码找出矩阵中大于1的位置

这里用的正太分布np.random.normal(loc=0.0, scale=1.0, size=None)

loc:float 此概率分布的均值(对应着整个分布的中心centre)
scale:float 此概率分布的标准差(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)
size:int or tuple of ints 输出的shape,默认为None,只输出一个值

import numpy as np
array = np.random.normal(4, 4, (2, 2))
print(array)
print(array.shape)
array_ = array[array > 1]
print(array_)
array_0 = array[np.where(array>1)]
# *******还不知清楚是不是where的运行效率更好*******
print(array_0)
------------------------------------------------------
[[ 5.58765753  8.60368122]
 [ 6.05855259 -3.56926281]]
(2, 2)
[5.58765753 8.60368122 6.05855259]
[5.58765753 8.60368122 6.05855259]

一句代码带入就可以了,目前我觉得这样可以解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值