天天看点

02_NumpyNumpy(Numerical Python)1-array和asarray的区别2-ndarray的形状3-记得有一道面试题如下:

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]
           

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