Numpy

v = [0.5,0.75,1.0,1.5,2.0]
x = [0.5,0.75,1.0,1.5,2.0]
y = [0.5,0.75,1.0,1.5,2.0]

m =[v,v,v]
m
m[1]
m[1][2]
1.0
# 对于 Jupyter notebook
import numpy as np
import warnings

warnings.simplefilter('ignore')

%matplotlib inline
from matplotlib import pyplot as plt
import seaborn as sns

# 示例使用
data = np.random.randn(1000)
sns.histplot(data, kde=True)
plt.title('Example Histogram')
plt.show()

output_1_0

import numpy as np
a = np.array([0,0.5,1.0,1.5,2.0])
print(a)
print(type(a))
[0.  0.5 1.  1.5 2. ]
<class 'numpy.ndarray'>
a * 2 
array([0., 1., 2., 3., 4.])
b = np.array(range(5))
print(b)
[0 1 2 3 4]
a + b
array([0. , 1.5, 3. , 4.5, 6. ])
a ** 2
array([0.  , 0.25, 1.  , 2.25, 4.  ])
2 ** a
array([1.        , 1.41421356, 2.        , 2.82842712, 4.        ])
a ** a
array([1.        , 0.70710678, 1.        , 1.83711731, 4.        ])
b = np.random.standard_normal(1000000)
b
array([ 1.13601923,  0.41234919,  0.30718787, ..., -0.43725952,
        0.03715676,  0.07668733], shape=(1000000,))
c = list(b)
%time c = [i*2 for i in b]
CPU times: total: 93.8 ms
Wall time: 88.7 ms
%time 2 * b
CPU times: total: 0 ns
Wall time: 2.29 ms





array([ 2.27203846,  0.82469837,  0.61437575, ..., -0.87451903,
        0.07431351,  0.15337465], shape=(1000000,))
np.sqrt(a)
array([0.        , 0.70710678, 1.        , 1.22474487, 1.41421356])
np.sqrt(2.5)
np.float64(1.5811388300841898)
import math
math.sqrt(2.5)
1.5811388300841898
b = np.array([a,a*2])
b
array([[0. , 0.5, 1. , 1.5, 2. ],
       [0. , 1. , 2. , 3. , 4. ]])
b[0]
array([0. , 0.5, 1. , 1.5, 2. ])
b[0,2]
np.float64(1.0)
b.sum() # 所有元素全部求和,不管是第一行还是第二行
np.float64(15.0)
d = b.sum(axis=0)  # axis=0是按列求和
print(d)
[0.  1.5 3.  4.5 6. ]
e = b.sum(axis=1)  # axis=0是按行求和
print(e)
[ 5. 10.]
#条件索引、布尔值
year_arr = np.array([[1998,2001,2000],
                   [2005,2002,2003],
                   [2006,2004,2008]])
filtered_arr = year_arr[year_arr>=2005]
print(filtered_arr)
[2005 2006 2008]
filtered_arr = year_arr[(year_arr<=2005) & (year_arr%2 ==0)]  # “或 ”使用 | 
print(filtered_arr)
[1998 2000 2002 2004]
arr = np.random.randn(3,4)
print(arr)
[[ 0.5762243  -0.13528037 -0.6728994  -1.1753083 ]
 [-1.37623103 -0.83079539  0.59286483  0.7799382 ]
 [-0.9253736   0.78190355 -0.23116942  1.40318738]]
np.where(arr>0,1,-1)  # np.where(条件判断,True:值,False:值)
array([[ 1, -1, -1, -1],
       [-1, -1,  1,  1],
       [-1,  1, -1,  1]])
np.sign(arr) # 正的返回1,负的返回-1
array([[ 1., -1., -1., -1.],
       [-1., -1.,  1.,  1.],
       [-1.,  1., -1.,  1.]])
print(np.any(arr>0))
True
print(np.all(arr>0))
False
print(a)
b = a.reshape(5) # 重塑
b
[0.  0.5 1.  1.5 2. ]





array([0. , 0.5, 1. , 1.5, 2. ])
b = np.array(b,dtype=float)
b
array([0. , 0.5, 1. , 1.5, 2. ])
b*2
array([0., 1., 2., 3., 4.])
b>10
array([False, False, False, False, False])
b[b>10]
array([], dtype=float64)
b[(b>10) & (b<20)]
array([], dtype=float64)
#Numpy Ndarray的创建方法
l = range(10)
data = np.array(l)
print(data) 
print(data.shape) #
print(data.ndim) #
[0 1 2 3 4 5 6 7 8 9]
(10,)
1
# 嵌套序列转换为ndarray
l2 = [range(10),range(10)]
data = np.array(l2)
print(data)
print(data.shape)  #(2,10) 2行10列
[[0 1 2 3 4 5 6 7 8 9]
 [0 1 2 3 4 5 6 7 8 9]]
(2, 10)
c = np.zeros((2,3,4), dtype='i')  #全零的数组 # 创建一个形状为 (2, 3, 4) 的三维数组,数据类型为整数
print(c)  # 数组形状 (2, 3, 4)  第一维:2 个元素(可以理解为 2 个平面/矩阵)  第二维:每个平面有 3 行  第三维:每行有 4 列
print(c.shape) # 这个数组总共有 2 × 3 × 4 = 24 个元素,全部初始化为整数 0。
[[[0 0 0 0]
  [0 0 0 0]
  [0 0 0 0]]

 [[0 0 0 0]
  [0 0 0 0]
  [0 0 0 0]]]
(2, 3, 4)
one_arr = np.ones((2,3)) # 创建一个形状为 (2, 3) 的二维数组,所有元素为 1
one_arr # 数组形状 (2, 3) 第一维:2 行  第二维:3 列 总共有 2 × 3 = 6 个元素
array([[1., 1., 1.],
       [1., 1., 1.]])
d = np.ones_like(c,dtype='f',order='C') # 创建一个与数组 c 形状相同但元素全为 1 的新数组
d  # order='C':指定内存布局为 C 风格(行优先)
        # 'C':C 风格,行优先(默认值)  
        # 'F':Fortran 风格,列优先
        # 'A':保持与输入数组 c 相同的顺序
        # 'K':尽可能保持与输入数组 c 相同的内存布局
array([[[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]],

       [[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]]], dtype=float32)
e = np.empty((2,3,4))  # 创建一个形状为 (2, 3, 4) 的三维数组,内容未初始化
e  # 不初始化数组元素:数组中的值是随机的,是内存中的原始数据

    # 形状:(2, 3, 4) 表示:
    # 第一维:2 个元素(2 个平面)
    # 第二维:每个平面有 3 行
    # 第三维:每行有 4 列
    # 总元素:2 × 3 × 4 = 24 个
array([[[-0.25, -0.5 ,  0.  , -0.25],
        [ 0.25, -0.5 ,  0.5 , -0.25],
        [ 0.25,  0.  ,  0.5 ,  0.25]],

       [[ 0.25,  0.5 ,  0.  ,  0.25],
        [-0.25,  0.5 , -0.5 ,  0.25],
        [-0.25,  0.  , -0.5 , -0.25]]])
g = np.linspace(5,15,15)   # # 创建从 5 到 15(包含端点)的 15 个等间距点 ,5~15等距离分15份
g
array([ 5.        ,  5.71428571,  6.42857143,  7.14285714,  7.85714286,
        8.57142857,  9.28571429, 10.        , 10.71428571, 11.42857143,
       12.14285714, 12.85714286, 13.57142857, 14.28571429, 15.        ])
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
type(np.arange(10))
numpy.ndarray
g = np.linspace(1,15,15)
g
array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11., 12., 13.,
       14., 15.])
g.shape
(15,)
np.shape(g)
(15,)
g.reshape((3,5)) # 构建出想要额数据结构
array([[ 1.,  2.,  3.,  4.,  5.],
       [ 6.,  7.,  8.,  9., 10.],
       [11., 12., 13., 14., 15.]])
np.arange(10).reshape(2,5)
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])
print(g)
np.resize(g,(3,2))
[ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10. 11. 12. 13. 14. 15.]





array([[1., 2.],
       [3., 4.],
       [5., 6.]])
np.resize(g,(1,5))
array([[1., 2., 3., 4., 5.]])
np.resize(g,(5,4))
array([[ 1.,  2.,  3.,  4.],
       [ 5.,  6.,  7.,  8.],
       [ 9., 10., 11., 12.],
       [13., 14., 15.,  1.],
       [ 2.,  3.,  4.,  5.]])
h = np.resize(g,(5,3))
print(h)
h.T  # 转置
[[ 1.  2.  3.]
 [ 4.  5.  6.]
 [ 7.  8.  9.]
 [10. 11. 12.]
 [13. 14. 15.]]





array([[ 1.,  4.,  7., 10., 13.],
       [ 2.,  5.,  8., 11., 14.],
       [ 3.,  6.,  9., 12., 15.]])
h.transpose() # 转置
array([[ 1.,  4.,  7., 10., 13.],
       [ 2.,  5.,  8., 11., 14.],
       [ 3.,  6.,  9., 12., 15.]])
print(h)
np.hstack((h,2*h))
[[ 1.  2.  3.]
 [ 4.  5.  6.]
 [ 7.  8.  9.]
 [10. 11. 12.]
 [13. 14. 15.]]





array([[ 1.,  2.,  3.,  2.,  4.,  6.],
       [ 4.,  5.,  6.,  8., 10., 12.],
       [ 7.,  8.,  9., 14., 16., 18.],
       [10., 11., 12., 20., 22., 24.],
       [13., 14., 15., 26., 28., 30.]])
print(h)
np.vstack((h,2*h))
[[ 1.  2.  3.]
 [ 4.  5.  6.]
 [ 7.  8.  9.]
 [10. 11. 12.]
 [13. 14. 15.]]





array([[ 1.,  2.,  3.],
       [ 4.,  5.,  6.],
       [ 7.,  8.,  9.],
       [10., 11., 12.],
       [13., 14., 15.],
       [ 2.,  4.,  6.],
       [ 8., 10., 12.],
       [14., 16., 18.],
       [20., 22., 24.],
       [26., 28., 30.]])
h.flatten()
array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11., 12., 13.,
       14., 15.])
h.flatten(order='C')
array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11., 12., 13.,
       14., 15.])
h.flatten(order='F')
array([ 1.,  4.,  7., 10., 13.,  2.,  5.,  8., 11., 14.,  3.,  6.,  9.,
       12., 15.])
for i in h.flatten(order='C'):
    print(i,end=' ')
1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 
r = np.random.standard_normal((4,3))  # 生成一个符合标准正态分布的随机数组:
s = np.random.standard_normal((4,3)) # 生成一个形状为 (4, 3) 的数组,元素服从标准正态分布

# 1. 标准正态分布
# 均值 μ = 0
# 标准差 σ = 1
# 概率密度函数:$f(x) = \frac{1}{\sqrt{2\pi}} e^{-\frac{x^2}{2}}$
# 大约 68% 的数据在 [-1, 1] 之间,95% 在 [-2, 2] 之间
print(r)
print('---------------')
print(s)
[[-0.37037595  0.98599302  1.61741552]
 [-0.67741868  0.38069952  0.75054242]
 [ 1.05923802 -1.18756829  0.73425732]
 [-1.67827063 -0.26760523  0.51534513]]
---------------
[[-0.48924505  0.37452073  0.0206262 ]
 [-0.04270628  0.98546438 -1.5370172 ]
 [-0.1317573  -0.83769127  0.61298976]
 [-0.94184784  0.70637614 -1.4063769 ]]
import random
np.random.seed(10)
random.seed(10)  #  锁定产生的随机数
s = np.random.standard_normal((4,3))
s
array([[ 1.3315865 ,  0.71527897, -1.54540029],
       [-0.00838385,  0.62133597, -0.72008556],
       [ 0.26551159,  0.10854853,  0.00429143],
       [-0.17460021,  0.43302619,  1.20303737]])
np.random.seed(10) #  锁定产生的随机数
t = np.random.standard_normal((4,3))
t
array([[ 1.3315865 ,  0.71527897, -1.54540029],
       [-0.00838385,  0.62133597, -0.72008556],
       [ 0.26551159,  0.10854853,  0.00429143],
       [-0.17460021,  0.43302619,  1.20303737]])
t + s  # 元素级相加
array([[ 2.66317301,  1.43055795, -3.09080058],
       [-0.0167677 ,  1.24267195, -1.44017112],
       [ 0.53102317,  0.21709705,  0.00858286],
       [-0.34920042,  0.86605238,  2.40607475]])
t
array([[ 1.3315865 ,  0.71527897, -1.54540029],
       [-0.00838385,  0.62133597, -0.72008556],
       [ 0.26551159,  0.10854853,  0.00429143],
       [-0.17460021,  0.43302619,  1.20303737]])
2 * t + 3
array([[ 5.66317301,  4.43055795, -0.09080058],
       [ 2.9832323 ,  4.24267195,  1.55982888],
       [ 3.53102317,  3.21709705,  3.00858286],
       [ 2.65079958,  3.86605238,  5.40607475]])
def f(x):
    return 3 * x + 5
f(0.5)
6.5
r
array([[-0.37037595,  0.98599302,  1.61741552],
       [-0.67741868,  0.38069952,  0.75054242],
       [ 1.05923802, -1.18756829,  0.73425732],
       [-1.67827063, -0.26760523,  0.51534513]])
f(r)
array([[ 3.88887215,  7.95797906,  9.85224657],
       [ 2.96774396,  6.14209855,  7.25162726],
       [ 8.17771406,  1.43729513,  7.20277195],
       [-0.03481188,  4.19718431,  6.54603539]])
import math
math.sin(r)  # 普通的python math函数不能作用于numpy array
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

Cell In[155], line 2
      1 import math
----> 2 math.sin(r)  # 普通的python math函数不能作用于numpy array


TypeError: only 0-dimensional arrays can be converted to Python scalars
np.sin(r)
array([[-0.36196591,  0.83382068,  0.99891352],
       [-0.62678377,  0.37156999,  0.68203554],
       [ 0.87198272, -0.92746245,  0.67003603],
       [-0.99423019, -0.26442267,  0.49283518]])
#numpy和python循环的性能比较
import math
%time l = [math.sin(x) for x in range(10000000)]
CPU times: total: 891 ms
Wall time: 910 ms
%time l = np.sin(np.arange(10000000))  #尽量在python层面避免循环可以大幅提升运算速度
CPU times: total: 156 ms
Wall time: 164 ms
%time l = [np.sin(x) for x in range(10000000)]  #不要将numpy的函数方法用于普通的python数据类型
CPU times: total: 7.66 s
Wall time: 7.77 s
%%time
num = 99999
x = []
y = []

for i in range(num):
    x.append(i)
    y.append(math.sin(x[i] ** 3)  + math.cosh(x[i] / num))

CPU times: total: 234 ms
Wall time: 225 ms
%%time
num = 99999999
#x = np.linspace(l,num,num)
#y = np.sin(x**3) + np.cosh(x/num)
CPU times: total: 0 ns
Wall time: 2.62 μs
posted @ 2025-12-25 22:49  是17阿哥呀  阅读(6)  评论(0)    收藏  举报