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阿哥呀  阅读(8)  评论(0)    收藏  举报