day02_numpy_demo

news2024/12/23 9:05:20

Numpy

  • Numpy的优势
  • ndarray属性
  • 基本操作
    ndarray.func()
    numpy.func()
  • ndarray的运算:逻辑运算、统计运算、数组间运算
  • 合并、分割、IO操作、数据处理,不过这个一般使用的是pandas

Numpy的优势

Numpy = numerical数值化 + python 数值计算的python库,用于快速处理任意维度的数组。
ndarrray = n任意个 + d(dimension维度) + array 任意维度的数组的意思
Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器
Numpy提供了一个N维数组类型ndarray,他描述相同类型的items的集合

import numpy as np

score = np.array([[80, 89, 86, 67, 79],
                [78, 97, 89, 67, 81],
                [90, 94, 78, 67, 74],
                [91, 91, 90, 67, 69],
                [76, 87, 75, 67, 86],
                [70, 79, 84, 67, 84],
                [94, 92, 93, 67, 64],
                [86, 85, 83, 67, 80]])
score
array([[80, 89, 86, 67, 79],
       [78, 97, 89, 67, 81],
       [90, 94, 78, 67, 74],
       [91, 91, 90, 67, 69],
       [76, 87, 75, 67, 86],
       [70, 79, 84, 67, 84],
       [94, 92, 93, 67, 64],
       [86, 85, 83, 67, 80]])
type(score)
numpy.ndarray
## ndarray和list的效率的对比
import random
import time
import numpy as np
a = []
for i in range(5000000):
    a.append(random.random())
t1 = time.time()
sum1=sum(a)
t2 = time.time()

b = np.array(a)
t4 = time.time()
sum3=np.sum(b)
t5 = time.time()
print('使用原生list的求和计算使用的时间:', t2-t1, "\t使用ndarry的时间计算:", t5-t4)
使用原生list的求和计算使用的时间: 0.03126645088195801 	使用ndarry的时间计算: 0.0027697086334228516

从上面的结果显示使用ndarray的时间处理和原生的list相比更加快速
Numpy专门的针对ndarray的操作和运算进行了设计,所以数组的存储效率和输入输出性能远远的高于Python中嵌套列表

  • 第一个:内存块存储风格:ndarray必须要相同的类型,可以连续存储 list的通用性强,可以不同类型数据,所以list数据之间是依靠引用的形式存储
  • 第二个:并行化处理形式:ndarray支持并行化运算
  • 第三个:底层语言:Numpy底层语言是c,内部解除了GIL全局解释器的限制

ndarray属性

属性

ndarray.shape:数组维度的元组
ndarray.ndim:数组维度
ndarray.size:数组中元素的个数
ndarray.itemszie:一个数组元素的长度
ndarray.dtype:数组元素的类型

score
print(score.shape) #(8, 5) 8行5列
print(score.ndim) # 2
print(score.size) # 40
print(score.itemsize) # 4
print(score.dtype) # int32
(8, 5)
2
40
4
int32
## ndarray的形状
import numpy as np
a = np.array([1, 2, 3, 4])
b = np.array([[1, 2, 3], [3, 4, 5]])
c = np.array([[[1, 3, 4], [3, 4, 5]], 
              [[1, 5, 7], [4, 7, 8]]])
print(a.shape, b.shape, c.shape)
(4,) (2, 3) (2, 2, 3)
print(a, '\n\n', b, '\n\n', c)
[1 2 3 4] 

 [[1 2 3]
 [3 4 5]] 

 [[[1 3 4]
  [3 4 5]]

 [[1 5 7]
  [4 7 8]]]
data = np.array([1.1, 2.2, 3.3], dtype=np.float32)
data2 = np.array([1.2, 2.2, 3.2], dtype='float32')
print(data, data.dtype, data2, data2.dtype)
[1.1 2.2 3.3] float32 [1.2 2.2 3.2] float32

生成数组

  • 生成0和1的:
    • np.ones(shape[, dtype, order]) np.zeros(shape[, dtype, order])
    • np.ones(shape=(2, 3), dtype=‘int32’)
    • np.zeros(shape=(2, 3), dtype=np.float32)
  • 从现有数组中生成:
    • np.array() np.copy() np.asarray()
    • data1 = np.array(score) ## 深拷贝
    • data2 = np.asarray(score) ## 浅拷贝
    • data3 = np.copy(score) ## 深拷贝
  • 生成固定范围的数组:
    • np.linspace(satrt, stop, num, endpoint, restep, detype) np.arange()
    • np.linspace(0, 10, 100) ## [0, 10]产生100个等距离的数组
    • np.arange(a, b, c) ## 产生[a, b) 步长为c的数组
  • 生成随机数组:
    • np.random.rand(d0, d1, d2,....) 返回[0.0, 1.0]内的一组均匀分布的数组, d0, d1, d2表示维度的元组数据
    • np.random.uniform(low=0.0, high=1.0, size=None) 均匀分布[low, high),size-int类型表输出一位样本数,元组表输出的是对应维度数组
    • np.random.normal(loc=0.0, scale=1.0, size=None) 正态分布 均值loc 标准差scale 形状size
np.ones(shape=(2, 4))
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.]])
np.zeros((4, 3))
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])
data1 = np.array([1, 3, 4, 5])
data1
array([1, 3, 4, 5])
data2 = np.asarray(data1)
data2
array([1, 3, 4, 5])
data3 = np.copy(data1)
data3
array([1, 3, 4, 5])
np.linspace(0, 10, 100)
array([ 0.        ,  0.1010101 ,  0.2020202 ,  0.3030303 ,  0.4040404 ,
        0.50505051,  0.60606061,  0.70707071,  0.80808081,  0.90909091,
        1.01010101,  1.11111111,  1.21212121,  1.31313131,  1.41414141,
        1.51515152,  1.61616162,  1.71717172,  1.81818182,  1.91919192,
        2.02020202,  2.12121212,  2.22222222,  2.32323232,  2.42424242,
        2.52525253,  2.62626263,  2.72727273,  2.82828283,  2.92929293,
        3.03030303,  3.13131313,  3.23232323,  3.33333333,  3.43434343,
        3.53535354,  3.63636364,  3.73737374,  3.83838384,  3.93939394,
        4.04040404,  4.14141414,  4.24242424,  4.34343434,  4.44444444,
        4.54545455,  4.64646465,  4.74747475,  4.84848485,  4.94949495,
        5.05050505,  5.15151515,  5.25252525,  5.35353535,  5.45454545,
        5.55555556,  5.65656566,  5.75757576,  5.85858586,  5.95959596,
        6.06060606,  6.16161616,  6.26262626,  6.36363636,  6.46464646,
        6.56565657,  6.66666667,  6.76767677,  6.86868687,  6.96969697,
        7.07070707,  7.17171717,  7.27272727,  7.37373737,  7.47474747,
        7.57575758,  7.67676768,  7.77777778,  7.87878788,  7.97979798,
        8.08080808,  8.18181818,  8.28282828,  8.38383838,  8.48484848,
        8.58585859,  8.68686869,  8.78787879,  8.88888889,  8.98989899,
        9.09090909,  9.19191919,  9.29292929,  9.39393939,  9.49494949,
        9.5959596 ,  9.6969697 ,  9.7979798 ,  9.8989899 , 10.        ])
np.arange(0, 100, 2)
array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,
       34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66,
       68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98])
np.random.uniform(1, 2, 20)
array([1.08186729, 1.14786875, 1.70033877, 1.21356519, 1.80826522,
       1.82539046, 1.2411259 , 1.94754535, 1.26016768, 1.95195603,
       1.83118684, 1.93096164, 1.42540342, 1.01900246, 1.00777939,
       1.94587154, 1.30147204, 1.85872718, 1.51138215, 1.72144173])
np.random.rand(2, 3)
array([[0.93695681, 0.54056962, 0.05346231],
       [0.25430123, 0.4679477 , 0.42365386]])
data4 = np.random.normal(0, 1, 10000000)
data4
array([-1.37843425,  0.43112438,  0.74566392, ...,  1.11031839,
       -0.35627334, -0.49286865])
import matplotlib.pyplot as plt

plt.figure(figsize=(15, 8), dpi=80)
plt.hist(data4, 1000)
plt.show()

在这里插入图片描述

数组的切片操作和数据索引

import numpy as np
stock_change = np.random.normal(loc=0, scale=1, size=(8, 10))
stock_change
array([[-0.0128315 ,  1.36389291,  1.67468755, -1.63839812,  0.50246918,
         0.40632079,  0.5468709 , -1.51506239, -0.95175431,  0.79676231],
       [-0.29024725, -0.85783328, -2.88228976,  0.09475102,  0.26886068,
        -0.72337737,  0.32906655,  1.38442008,  0.22017286,  0.11595155],
       [-1.48797053, -0.34888996, -0.46878054,  0.06614233, -1.2163201 ,
        -0.12437208, -0.48048511,  0.92053831,  1.37148844,  0.4052761 ],
       [-0.68483909,  1.45441467,  0.32439071,  2.09266866, -1.40087978,
         0.21482243,  1.06350017, -1.12371055, -0.21362273, -0.86489608],
       [-0.8955743 , -2.80666246, -1.81775787, -0.64719575, -1.03749633,
        -0.09075791,  0.04027887,  0.88156425, -0.38851649,  0.4366844 ],
       [-0.6112534 ,  0.20743331, -1.10785011, -1.94937533,  0.79183302,
        -1.43629441, -0.39276676,  1.43465142, -0.77917209,  0.75375268],
       [-0.45255197,  0.21874378,  0.74356075,  0.89123163,  0.80052696,
         0.07645454,  1.18475498,  1.21210169, -2.57089921, -0.04719686],
       [ 1.49996354,  1.73125796,  0.35972564, -0.31768555, -0.23859956,
         0.14878977,  1.78480518, -0.157626  ,  0.52180221,  1.53564593]])
stock_change[0, 0:3] # 二维数组中第一个一维数组中的第0到3个之间的数据,左闭右开
array([-1.23848824,  1.80273454,  0.48612183])
a1 = np.array([[[1, 2, 3],[4, 5, 6]], [[12, 3, 4], [5, 6, 7]]])
a1
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[12,  3,  4],
        [ 5,  6,  7]]])
a1[1, 0, 2]  ## 三维数组中第二个二维数组中的第一个一维数组的第三个数据
4

形状的修改

  • ndarray.reshape(shape)
  • ndarray.resize(shape)
  • ndarray.T
print(stock_change.shape)
print(stock_change)
data = stock_change.reshape(10, 8)  ## 有返回值 不修改对象stock_change的原始数据
print(data.shape)
print(data)
(10, 8)
[[-1.23848824  1.80273454  0.48612183 -0.72560924  0.70273282  1.0001417
  -1.50264292  0.07910228]
 [ 0.50097203 -0.30643765 -2.06606864  1.06603865 -0.24707909 -0.43582239
   1.40507793  0.16617008]
 [ 0.90592803  0.42831191 -0.92043446 -0.86909989  1.86906101 -0.27504789
  -0.85507962 -0.06812796]
 [-0.47386474 -0.12860694  0.78529739  0.6299527   1.35195163  0.52554048
  -1.44443021 -0.30228474]
 [-2.00270709 -0.93547033 -1.91377025 -0.44282643  0.39398671 -1.15777911
   1.06886255 -0.99258445]
 [ 1.46011953  0.02989662 -0.57156073  0.33255032  1.10206919  1.10728184
  -0.2309872  -0.36046913]
 [ 0.6419396   0.45193213 -0.28647482  2.35270101 -1.36580147 -0.3416711
  -0.68923525  0.40515396]
 [-0.65856583 -0.80067154  1.00151152 -0.59024112  1.72517446  0.99283299
   0.32894163  0.29112266]
 [-0.02950995  1.00548516  0.28799688 -0.23560119 -0.27545952 -2.06756887
   0.10599702  1.29010633]
 [ 0.10229354 -1.61937238 -2.19289266 -2.0243394  -1.584921    1.1576834
   0.11722609  1.00201755]]
(10, 8)
[[-1.23848824  1.80273454  0.48612183 -0.72560924  0.70273282  1.0001417
  -1.50264292  0.07910228]
 [ 0.50097203 -0.30643765 -2.06606864  1.06603865 -0.24707909 -0.43582239
   1.40507793  0.16617008]
 [ 0.90592803  0.42831191 -0.92043446 -0.86909989  1.86906101 -0.27504789
  -0.85507962 -0.06812796]
 [-0.47386474 -0.12860694  0.78529739  0.6299527   1.35195163  0.52554048
  -1.44443021 -0.30228474]
 [-2.00270709 -0.93547033 -1.91377025 -0.44282643  0.39398671 -1.15777911
   1.06886255 -0.99258445]
 [ 1.46011953  0.02989662 -0.57156073  0.33255032  1.10206919  1.10728184
  -0.2309872  -0.36046913]
 [ 0.6419396   0.45193213 -0.28647482  2.35270101 -1.36580147 -0.3416711
  -0.68923525  0.40515396]
 [-0.65856583 -0.80067154  1.00151152 -0.59024112  1.72517446  0.99283299
   0.32894163  0.29112266]
 [-0.02950995  1.00548516  0.28799688 -0.23560119 -0.27545952 -2.06756887
   0.10599702  1.29010633]
 [ 0.10229354 -1.61937238 -2.19289266 -2.0243394  -1.584921    1.1576834
   0.11722609  1.00201755]]
stock_change.resize((10, 8))  ## 无返回值 直接改变stock_change对象
stock_change
array([[-1.23848824,  1.80273454,  0.48612183, -0.72560924,  0.70273282,
         1.0001417 , -1.50264292,  0.07910228],
       [ 0.50097203, -0.30643765, -2.06606864,  1.06603865, -0.24707909,
        -0.43582239,  1.40507793,  0.16617008],
       [ 0.90592803,  0.42831191, -0.92043446, -0.86909989,  1.86906101,
        -0.27504789, -0.85507962, -0.06812796],
       [-0.47386474, -0.12860694,  0.78529739,  0.6299527 ,  1.35195163,
         0.52554048, -1.44443021, -0.30228474],
       [-2.00270709, -0.93547033, -1.91377025, -0.44282643,  0.39398671,
        -1.15777911,  1.06886255, -0.99258445],
       [ 1.46011953,  0.02989662, -0.57156073,  0.33255032,  1.10206919,
         1.10728184, -0.2309872 , -0.36046913],
       [ 0.6419396 ,  0.45193213, -0.28647482,  2.35270101, -1.36580147,
        -0.3416711 , -0.68923525,  0.40515396],
       [-0.65856583, -0.80067154,  1.00151152, -0.59024112,  1.72517446,
         0.99283299,  0.32894163,  0.29112266],
       [-0.02950995,  1.00548516,  0.28799688, -0.23560119, -0.27545952,
        -2.06756887,  0.10599702,  1.29010633],
       [ 0.10229354, -1.61937238, -2.19289266, -2.0243394 , -1.584921  ,
         1.1576834 ,  0.11722609,  1.00201755]])
stock_change.T  ## 转置
array([[-1.23848824,  0.50097203,  0.90592803, -0.47386474, -2.00270709,
         1.46011953,  0.6419396 , -0.65856583, -0.02950995,  0.10229354],
       [ 1.80273454, -0.30643765,  0.42831191, -0.12860694, -0.93547033,
         0.02989662,  0.45193213, -0.80067154,  1.00548516, -1.61937238],
       [ 0.48612183, -2.06606864, -0.92043446,  0.78529739, -1.91377025,
        -0.57156073, -0.28647482,  1.00151152,  0.28799688, -2.19289266],
       [-0.72560924,  1.06603865, -0.86909989,  0.6299527 , -0.44282643,
         0.33255032,  2.35270101, -0.59024112, -0.23560119, -2.0243394 ],
       [ 0.70273282, -0.24707909,  1.86906101,  1.35195163,  0.39398671,
         1.10206919, -1.36580147,  1.72517446, -0.27545952, -1.584921  ],
       [ 1.0001417 , -0.43582239, -0.27504789,  0.52554048, -1.15777911,
         1.10728184, -0.3416711 ,  0.99283299, -2.06756887,  1.1576834 ],
       [-1.50264292,  1.40507793, -0.85507962, -1.44443021,  1.06886255,
        -0.2309872 , -0.68923525,  0.32894163,  0.10599702,  0.11722609],
       [ 0.07910228,  0.16617008, -0.06812796, -0.30228474, -0.99258445,
        -0.36046913,  0.40515396,  0.29112266,  1.29010633,  1.00201755]])

类型的修改和数组去重

  • ndarray.astype(type)
  • ndarray序列化到本地
    • ndarray.tostring()
    • ndarray.tobytes()
  • np.unique() 去重
stock_change.astype(np.int32)
array([[ 0,  1,  1, -1,  0,  0,  0, -1,  0,  0],
       [ 0,  0, -2,  0,  0,  0,  0,  1,  0,  0],
       [-1,  0,  0,  0, -1,  0,  0,  0,  1,  0],
       [ 0,  1,  0,  2, -1,  0,  1, -1,  0,  0],
       [ 0, -2, -1,  0, -1,  0,  0,  0,  0,  0],
       [ 0,  0, -1, -1,  0, -1,  0,  1,  0,  0],
       [ 0,  0,  0,  0,  0,  0,  1,  1, -2,  0],
       [ 1,  1,  0,  0,  0,  0,  1,  0,  0,  1]])
stock_change.tobytes()  ## 之前可以使用tostring的方法
b"\x10\x83d\xcbfG\x8a\xbf\x06\xcb\n_\x81\xd2\xf5?\xf6i\x89+\x85\xcb\xfa?(\x9dK\xf1\xe06\xfa\xbf\x040\xd3<:\x14\xe0?\xf4\x96\xb4\xeb(\x01\xda?\x9b\xfe\x94e\xf7\x7f\xe1?\x80I\xb5\x10\xb2=\xf8\xbf\xf2\x01\xcbv\xc5t\xee\xbf\x92\xbe9\xac\x13\x7f\xe9?F\x98\xc71i\x93\xd2\xbf\xcf~\x07\xc6^s\xeb\xbf$a\xd4\xee\xed\x0e\x07\xc0\xf2\xf0\x87I\x9aA\xb8?/\x91\xedg\x035\xd1?\xc0\x85\xe6K\xe8%\xe7\xbf9\r\r*m\x0f\xd5?H\x8d\xcb\xab\x95&\xf6?A\xed \xca\x9f.\xcc?\xb0\xce\x0f;\x00\xaf\xbd?\xe4\xa3\x860\xba\xce\xf7\xbf\x9e5\x1b\x8c6T\xd6\xbfv\xdd\xc3\x15\x80\x00\xde\xbf\x19s/\x1c\xb4\xee\xb0?\x9c\xc7I\x11\x0cv\xf3\xbf`\xcb$A\xd9\xd6\xbf\xbf}\xbd\xa6\x99D\xc0\xde\xbf(\xedu\xc2\x0cu\xed?W\x04\xd2\xdd\x9d\xf1\xf5?MD\xf8)\x0b\xf0\xd9?[`\xc0\xaa3\xea\xe5\xbf6ozQHE\xf7?M*CB\xd1\xc2\xd4?{<!\x11\xc9\xbd\x00@\xb3\x0b\xb0\xeb\x00j\xf6\xbf\x86\xfc\xe7*M\x7f\xcb?_\xca\xdc\xbf\x18\x04\xf1?\x85]G\xea\xb7\xfa\xf1\xbfi4gX\xfdW\xcb\xbf\xc2g^\x8b:\xad\xeb\xbf\x06l\x0bo\x8b\xa8\xec\xbf{L4s\x0bt\x06\xc0;\xdd0F\x89\x15\xfd\xbf\xf6\x06\x03\xde\xd3\xb5\xe4\xbf}\x13\xc9\xc0\x95\x99\xf0\xbf\xfb\rF\x14\xe9;\xb7\xbf\xa1\xa1\x9fpn\x9f\xa4?\x19\xa3\x84<\xc65\xec?\xb9^\xa1Ft\xdd\xd8\xbf\x8b,N\x1f\xa3\xf2\xdb?\xe4@UJc\x8f\xe3\xbfC\x02\xa0\xbf,\x8d\xca?\xf5)\x82\t\xc1\xb9\xf1\xbf\xbdxl0\xa40\xff\xbfi\x02C3\xb2V\xe9?Q^\x8d\xd9\x0f\xfb\xf6\xbf\xb0\x9c\x914\x17#\xd9\xbfe\xdf\xd2\x0cU\xf4\xf6?\xf3\xf7\xf4M\xfa\xee\xe8\xbf\xb6R=\xee\xbd\x1e\xe8?\x84o$\x87\x9c\xf6\xdc\xbf\xf5\xc6$\xd6\xcb\xff\xcb?@\xf6@\xeb?\xcb\xe7?\\\xa311\xf8\x84\xec?S\xf6>\xb5\xea\x9d\xe9?\x06\x18\xed_\x86\x92\xb3?_\xaf\x14\xa2\xc1\xf4\xf2?O\xd2\x02\xbd\xc4d\xf3?p\xe7\x80\x9a3\x91\x04\xc0\xeb\xfe#\xf2/*\xa8\xbf\x9a\xfa\\\xc5\xd9\xff\xf7?\xf4\xfe\xb0\x8a;\xb3\xfb?\x97\x89l\xad\xbe\x05\xd7?\x1d\xc4\xce\xc6\xf5T\xd4\xbf\xfd\x99\xf0'n\x8a\xce\xbf:J\xe4\x15\x8b\x0b\xc3??UZ\xe1\x8f\x8e\xfc?\xebph\xb9\x16-\xc4\xbf\x87]\xab\x8b\x9a\xb2\xe0?\xb4\xa2\tw\x01\x92\xf8?"
temp = np.array([[1, 2, 3, 4], [3, 4, 5, 6]])
np.unique(temp)
array([1, 2, 3, 4, 5, 6])

ndarray的运算

  • 逻辑运算:
    • stock_change > 0.5 数据大于0.5的标记为True 否则为False
    • stock_change[stock_change > 0.5] 返回所有大于0.5的数据
    • stock_change[stock_change > 0.5] = 1.1 返回所有大于0.5的数据更改为1.1
    • np.all(布尔值) 布尔值里面所有True才返回True, 只要有一个False就返回False
      • np.all(stock_change[0:2, 0:5] > 0) 判断里面数据是否全部大于0
    • np.any(布尔值) 布尔值里面有一个True就返回True,只有全是False才会返回False
      • np.any(stock_change[0:2, 0:5] > 0) 判断里面是否有数据大于0
    • 三元运算符:np.where(布尔值, True的位置的值, False位置的值)
      • np.where(stock_change>0, 1, 0) 将大于0的数据置为1 否则置为0
      • np.where(np.logical_and(stock_change > 0.5, stock_change < 1), 1, 0) 将大于0.5并且小于1的置为1,否则置为0
      • np.where(np.logical_or(stock_change > 0.5, stock_change < -0.5), 1, 0) 将大于0.5或者小于-0.5的置为1,否则置为0
  • 统计运算:
    • 统计指标函数:min,max,mean,median,var,std,函数其中有一个参数axis,为1代表使用行去进行统计,为0使用列进行统计计算。
      • np.max(a, axis=1) / ndarray.max(axis=1) / np.max(a) / adarray.max()
    • 返回最大值、最小值的位置:
      • np.argmax(a. axis=) / np.argmin(a, axis=)
  • 数组间运算:
    • 数组与数的运算:arr ±*/等等直接对数组中的每个元素执行相同的操作
    • 数组与数组的运算:需要满足广播机制
    • 广播机制:当操作两个数组进行运算的时候,numpy会比较两个数组的shape,只有满足shape对应位置相等或者相对应的一个地方为1的数组才可以进行运算,结果对应shape取相应的位置的最大值。
    • 矩阵运算:矩阵matrix 矩阵必须是二维的,但是数组可以是一位的。
      • np.mat() 将数组转换为矩阵
      • 有两种方法来存储矩阵:ndarray二维数组、matrix数据结构
      • 矩阵运算 (m, n) * (n , l) = (m, l) 也就是第一个矩阵的列数和第二个矩阵的行数要相等
      • np.matmul() numpy库中用于矩阵乘法的函数,它的作用是计算两个矩阵的乘积
      • np.dot() 向量点乘

逻辑运算

import numpy as np
stock_change = np.random.normal(loc=0, scale=1, size=(8, 10))
stock_change > 0.5
array([[False, False, False, False, False, False,  True,  True, False,
        False],
       [False, False, False, False, False, False, False,  True, False,
        False],
       [False,  True, False, False, False, False,  True,  True,  True,
         True],
       [False,  True,  True, False, False,  True, False, False, False,
        False],
       [False, False, False,  True, False, False, False,  True,  True,
        False],
       [False, False, False, False, False, False, False, False,  True,
        False],
       [False, False, False,  True, False,  True, False, False,  True,
         True],
       [False, False, False, False,  True, False,  True, False,  True,
        False]])
stock_change[stock_change > 0.5]
array([1.36389291, 1.67468755, 0.50246918, 0.5468709 , 0.79676231,
       1.38442008, 0.92053831, 1.37148844, 1.45441467, 2.09266866,
       1.06350017, 0.88156425, 0.79183302, 1.43465142, 0.75375268,
       0.74356075, 0.89123163, 0.80052696, 1.18475498, 1.21210169,
       1.49996354, 1.73125796, 1.78480518, 0.52180221, 1.53564593])
stock_change[stock_change > 0.5] = 1.1
stock_change
array([[-0.0128315 ,  1.1       ,  1.1       , -1.63839812,  1.1       ,
         0.40632079,  1.1       , -1.51506239, -0.95175431,  1.1       ],
       [-0.29024725, -0.85783328, -2.88228976,  0.09475102,  0.26886068,
        -0.72337737,  0.32906655,  1.1       ,  0.22017286,  0.11595155],
       [-1.48797053, -0.34888996, -0.46878054,  0.06614233, -1.2163201 ,
        -0.12437208, -0.48048511,  1.1       ,  1.1       ,  0.4052761 ],
       [-0.68483909,  1.1       ,  0.32439071,  1.1       , -1.40087978,
         0.21482243,  1.1       , -1.12371055, -0.21362273, -0.86489608],
       [-0.8955743 , -2.80666246, -1.81775787, -0.64719575, -1.03749633,
        -0.09075791,  0.04027887,  1.1       , -0.38851649,  0.4366844 ],
       [-0.6112534 ,  0.20743331, -1.10785011, -1.94937533,  1.1       ,
        -1.43629441, -0.39276676,  1.1       , -0.77917209,  1.1       ],
       [-0.45255197,  0.21874378,  1.1       ,  1.1       ,  1.1       ,
         0.07645454,  1.1       ,  1.1       , -2.57089921, -0.04719686],
       [ 1.1       ,  1.1       ,  0.35972564, -0.31768555, -0.23859956,
         0.14878977,  1.1       , -0.157626  ,  1.1       ,  1.1       ]])
print(np.all(stock_change[0:2, 0:5] > 0))
print(np.any(stock_change[0:2, 0:5] > 0))
False
True
print(np.where(stock_change>0, 1, 0))
[[0 1 1 0 0 0 1 1 1 0]
 [0 1 0 0 0 1 1 0 0 1]
 [0 1 0 0 0 0 0 1 0 0]
 [1 0 1 0 1 1 0 0 0 1]
 [1 0 0 1 0 1 0 0 1 0]
 [1 1 1 1 0 1 1 1 0 1]
 [0 1 0 1 0 0 1 0 1 0]
 [1 1 1 0 1 1 1 0 0 1]]
print(np.where(np.logical_and(stock_change > 0.5, stock_change < 1), 1 , 0))
[[0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 1]
 [0 1 0 0 0 0 0 0 0 0]
 [0 0 0 0 1 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0]
 [0 0 1 0 0 0 1 1 0 0]
 [0 0 0 0 0 0 1 0 0 0]
 [0 0 0 0 0 0 0 0 0 1]]
print(np.where(np.logical_or(stock_change > 0.5, stock_change < -0.5), 1 , 0))
[[1 0 0 0 1 0 0 1 1 0]
 [1 1 1 1 0 1 1 1 0 1]
 [0 1 1 1 1 0 1 0 1 0]
 [1 0 1 0 1 1 1 0 0 1]
 [0 1 0 0 0 1 0 1 1 0]
 [0 1 1 0 0 0 1 1 1 1]
 [1 0 0 0 0 0 1 1 0 0]
 [1 0 1 0 1 0 0 1 1 1]]

统计运算

print(np.max(stock_change), stock_change.max())
2.837073584187165 2.837073584187165
print(np.mean(stock_change, axis=0), np.mean(stock_change, axis=1), np.mean(stock_change))
[-0.9652667  -0.15328082  0.08317861 -0.54300528 -0.42430401 -0.27689675
 -0.03939256  0.58928582  0.11866925  0.06092911] [-0.24814861 -0.59923979  0.47094442  0.21607003 -0.15542244 -0.36903679
 -0.12744662 -0.42778684] -0.15500833265906144
print(np.argmax(stock_change), np.argmax(stock_change, axis=1))
32 [7 7 7 2 3 8 5 8]

数组的运算

数组和数的运算
arr = np.array([[1, 2, 3, 2, 1, 4], [5,  6, 1, 2, 3, 1]])
arr
array([[1, 2, 3, 2, 1, 4],
       [5, 6, 1, 2, 3, 1]])
arr+1
array([[2, 3, 4, 3, 2, 5],
       [6, 7, 2, 3, 4, 2]])
arr*2
array([[ 2,  4,  6,  4,  2,  8],
       [10, 12,  2,  4,  6,  2]])
arr/2
array([[0.5, 1. , 1.5, 1. , 0.5, 2. ],
       [2.5, 3. , 0.5, 1. , 1.5, 0.5]])
arr-2
array([[-1,  0,  1,  0, -1,  2],
       [ 3,  4, -1,  0,  1, -1]])
数组和数组运算
arr1 = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]])
arr2 = np.array([[1], [3]])
print(arr1, "\n\n", arr2)
[[1 2 3 2 1 4]
 [5 6 1 2 3 1]] 

 [[1]
 [3]]
print(arr1 * arr2, '\n\n', arr1 / arr2)
[[ 1  2  3  2  1  4]
 [15 18  3  6  9  3]] 

 [[1.         2.         3.         2.         1.         4.        ]
 [1.66666667 2.         0.33333333 0.66666667 1.         0.33333333]]
矩阵运算
data = np.array([
    [80, 86],
    [82, 80],
    [85, 78],
    [90, 90],
    [86, 82],
    [82, 90],
    [78, 80],
    [92, 94]])
data
array([[80, 86],
       [82, 80],
       [85, 78],
       [90, 90],
       [86, 82],
       [82, 90],
       [78, 80],
       [92, 94]])
data2 = np.mat([[80, 86],
       [82, 80],
       [85, 78],
       [90, 90],
       [86, 82],
       [82, 90],
       [78, 80],
       [92, 94]])
print(data2, '\n\n', type(data2))
[[80 86]
 [82 80]
 [85 78]
 [90 90]
 [86 82]
 [82 90]
 [78 80]
 [92 94]] 

 <class 'numpy.matrix'>
data3 = np.mat([[0.3], [0.7]])
data3
matrix([[0.3],
        [0.7]])
print(data2 * data3, '\n\n', data @ np.array([[0.3], [0.7]]))  ## 计算成绩 第一列乘上0.3 第二列乘上0.7
[[84.2]
 [80.6]
 [80.1]
 [90. ]
 [83.2]
 [87.6]
 [79.4]
 [93.4]] 

 [[84.2]
 [80.6]
 [80.1]
 [90. ]
 [83.2]
 [87.6]
 [79.4]
 [93.4]]
print(np.matmul(data2, data3), '\n\n', np.dot(data2, data3))
[[84.2]
 [80.6]
 [80.1]
 [90. ]
 [83.2]
 [87.6]
 [79.4]
 [93.4]] 

 [[84.2]
 [80.6]
 [80.1]
 [90. ]
 [83.2]
 [87.6]
 [79.4]
 [93.4]]

合并和分割

  • 合并:合并可以从水平的方向进行合并,也可以在垂直的方法进行合并
    • numpy.hstack(tuple(column, wise)) 水平拼接
    • numpy.vstack(tuple(row, wise)) 垂直拼接
    • numpy.concatenate((a1, a2, a3…), axis=0) axis=1来表示水平,axis=0表示垂直
  • 分割
    • np.split(ary, indices_or_sections, axis=0)

合并

import numpy as np
a = np.array([1, 2, 3])
b = np.array([2, 3, 4])
np.hstack((a, b))
array([1, 2, 3, 2, 3, 4])
np.vstack((a, b))
array([[1, 2, 3],
       [2, 3, 4]])
np.concatenate((a, b), axis=0)
array([1, 2, 3, 2, 3, 4])
x = np.array([[1, 2], [3, 4]])
print(np.concatenate((x, x), axis=0))
print('\n\n', np.concatenate((x, x), axis=1))
[[1 2]
 [3 4]
 [1 2]
 [3 4]]


 [[1 2 1 2]
 [3 4 3 4]]

分割

x1 = np.arange(9.0)
np.split(x1, 3)
[array([0., 1., 2.]), array([3., 4., 5.]), array([6., 7., 8.])]
x1 = np.arange(8.0)
np.split(x1, [3, 5, 6, 8])  ## 按照索引进行分割
[array([0., 1., 2.]),
 array([3., 4.]),
 array([5.]),
 array([6., 7.]),
 array([], dtype=float64)]

IO操作和数据处理

  • numpy数据读取:
    • np.genfromtxt(path, delimiter=) ## 文件路径和分隔符号
    • np.genfromtxt(‘tes.csv’, delimiter=‘,’)
import numpy as np
data = np.genfromtxt('gh.csv', delimiter=',')
data
array([[  nan,   nan,   nan],
       [  12.,  213.,  321.],
       [ 123.,  345., 1241.],
       [  14.,   24.,  123.]])
  • 对于上面的数组中的nan值的类型是float64,对于这个的一般处理方式有两种
    • 将数据存在nan的行删除
    • 使用该列的平均值填充到nan的位置

总结

  • Numpy的优势:内存存储风格,ndrray存储相同数据,内存连续存储,底层c语言实现,支持多线程
  • ndarray的属性:shape、dtype、ndim、size、itemsize
  • 基本操作:ndarray.方法() np.函数()
    • 生成数组的方法:np.ones(shape) np.zeros(shape)
    • 从现有数组中生成:np.array() np.copy() np.asarray()
    • 生成固定范围的数组:np.linspace(a, b, c) np.arange(a, b, c)
    • 生成随机数:均匀分布:np.random.uniform() 正态分布:np.random.normal()
    • 切片索引
    • 形状修改:ndarray.reshape((a, b)) ndarray.resize((a, b)) ndarray.T
    • 类型修改:ndarray.astype(type) ndarray.tobytes()
    • 数组去重:np.unique()
  • numpy的运算:
    • 逻辑运算:
      • 布尔索引
      • np.all() np.any()
      • np.where(a, b, c) a是布尔值 b是true对应的值 c是false对应的值
    • 统计运算
      • 统计指标:max min mean median var std
      • 最大值最小值位置:np.argmax() np.argmin()
    • 数组间运算
      • 数组与数的运算:
      • 数组与数组的运算:要注意广播机制
      • 矩阵运算:np.mat() np.dot() np.matmul()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1121117.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Node.js--》简易资金管理系统后台项目实战(后端)

今天开始使用 node vue3 ts搭建一个简易资金管理系统的前后端分离项目&#xff0c;因为前后端分离所以会分两个专栏分别讲解前端与后端的实现&#xff0c;后端项目文章讲解可参考&#xff1a;前端链接&#xff0c;我会在前后端的两类专栏的最后一篇文章中会将项目代码开源到我…

arduino 记录

​ 知识整理 Arduion U8G2简要说明 u8g2显示分为全页显示与分页显示和U8X8的无ram显示 全页显示需要单片机提供1024字节的ram&#xff0c;分页显示分为需要256字节和125字节的ram U8X8不需要ram,但不可画图&#xff0c;只能显示文字 全页使用 clearbuff senddbuff 分页…

javaweb中的转发与重定向

2023.10.22 在一个web应用中应该如何完成资源的跳转&#xff1f; 转发重定向 转发和重定向有什么区别&#xff1f; 转发是由服务器端进行的页面跳转&#xff0c;而重定向是由浏览器端进行的页面跳转。 ①代码上的区别&#xff1a; 转发&#xff1a; // 获取请求转发器对象…

Sublime Text forMac/Windows:高效代码编辑器的终极指南

你是否曾为寻找一款高效、强大且用户友好的代码编辑器而感到困扰&#xff1f;现在&#xff0c;让我们一起探索Sublime Text的魅力。Sublime Text是一款流行的代码编辑器&#xff0c;以其强大的功能和简洁的设计赢得了开发者的喜爱。本文将带你了解Sublime Text的各项特性&#…

1、VMware虚拟机及网络配置

一、VMware虚拟网络编辑器 1、选择NAT模式并配置子网 2、进入NAT设置&#xff0c;配置网关 3、宿主机网络适配器设置 二、创建虚拟机 在这里插入图片描述 三、开启虚拟机&#xff0c;安装操作系统 在该网段内配置静态ip&#xff0c;指定网关为前面NAT配置的网关地址…

游戏找不到msvcr100dll怎么办,分享5个有效修复方法

一、游戏找不到msvcr100dll会造成的困扰 在当今的数字时代&#xff0c;电子游戏已经成为了我们生活中不可或缺的一部分。它们为我们提供了娱乐和放松的机会&#xff0c;让我们能够在忙碌的生活中找到乐趣。然而&#xff0c;当我们在玩游戏时&#xff0c;可能会遇到一些技术问题…

【性能测试】MySQL慢查询原因/排查思路+SQL优化与性能定位思路...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Mysql慢查询现象、…

十四天学会C++之第八天:文件操作

1. 文件的打开和关闭 文件操作的基本概念。打开文件&#xff1a;使用fstream库打开文件以供读写。关闭文件&#xff1a;确保文件在使用完毕后正确关闭。 文件的打开和关闭&#xff1a;C 文件操作入门 在C编程中&#xff0c;文件操作是一项重要的任务&#xff0c;可以读取和写…

Java日志系统之Log4j2

Log4j2介绍 Log4j2是Log4j的升级版&#xff0c;参考Logback的优秀设计并修复了一些问题。主要优点有&#xff1a; 异常处理&#xff0c;在logback中&#xff0c;Appender中的异常不会被应用感知到&#xff0c;但是在log4j2中&#xff0c;提供了一些异常处理机制。性能提升&am…

Java高级编程----集合

集合 集合概述Collection接口List接口简介ArrayList集合Set接口简介Hash Set接口简介Map接口简介TreeMap集合Properties集合 集合概述 为了在程序中可以保存数目不确定的对象&#xff0c;Java提供了一系列特殊类&#xff0c;这些类可以存储任意类型的对象&#xff0c;并且长度…

使用java mail SMTPTransport发送邮箱,本地秒到,一上服务器就20-30s左右,生产环境直接发送失败。

一、代码 pom文件 <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!--pom.xml添加javax.mail的引用&#xff0c;或者项目引入…

【最短路径算法】一文掌握Dijkstra算法,详解与应用示例+代码

目录 1 Dijkstra算法 2 Dijkstra算法的步骤 3 Dijkstra算法python实现 4 Dijkstra算法应用示例详解 1 Dijkstra算法 Dijkstra算法&#xff08;迪杰斯特拉算法&#xff09;是一种用于在加权图中查找从一个起始节点到所有其他节点的最短路径的算法。该算法最初由荷兰计算机科…

JVM 基础篇:类加载器

一.了解JVM 1.1什么是JVM JVM是Java Virtual Machine&#xff08;Java虚拟机&#xff09;的缩写&#xff0c;是一个虚构出来的计算机&#xff0c;是通过在实际的计算机上仿真模拟计算机功能来实现的&#xff0c;JVM屏蔽了与具体操作系统平台相关的信息&#xff0c;Java程序只需…

通讯录和内存动态管理

目录 (通讯录)动态增长版 实现效果 找单身狗 题目 源码 思路 三个内存函数的模拟实现 模拟实现strncpy 模拟实现strncat 模拟实现atoi (通讯录)动态增长版 该版本通讯录在原版的基础上增加了检查容量函数&#xff0c;实现了通讯录的动态…

在PS中轻松实现肖像磨皮,感受Imagenomic Portraiture 4的强大

每个人都希望自己的肖像照片看起来漂亮、清晰并且光滑。然而&#xff0c;在处理肖像照片时&#xff0c;要达到这些效果通常需要花费大量时间和精力。如果您正在寻找一种简单快捷的方法来优化您的肖像照片&#xff0c;那么Imagenomic Portraiture 4插件将是您的理想选择。 Imag…

单接口的批量测试如何实现

一、痛点&#xff1a;一条测试数据对应一个测试方法 前面的章节中我们已经写代码实现了登录接口的处理调用&#xff0c;但是一个接口往往是需要多条测试用例才能完整的覆盖到每一种情况&#xff0c;针对于单接口多条测试用例需要执行的情况&#xff0c;该如何处理呢&#xff0…

uboot移植之mx6ull_alientek_nand.h文件详解一

一. 简介 mx6ull_alientek_nand.h文件是 开发板的 uboot的一个配置文件。每个开发板都有一个 .h的配置文件。 mx6ull_alientek_nand.h文件其实是 之前针对正点原子ALPHA开发板移植的 Uboot配置文件。 本文简单分析一下 针对正点原子ALPHA开发板的 配置文件&#xff1a; mx6u…

STL模拟实现—vector

引言&#xff1a;本篇文章主要是模拟实现vector&#xff0c;但不同于stl中vector的成员变量都是迭代器&#xff0c;这个自定义的vector是一个T* 的数据变量和一个int类型的size和int类型的capacity。&#xff08;有时间再写三个迭代器的版本吧&#xff01;&#xff09; 首先来看…

Redis学习(第八章缓存策略)

目录 RdisExample 课程介绍 1.Redis介绍 2.Redis 安装 3. Redis的数据结构 4. Redis缓存特性 5. Redis使用场景 6. Redis客户端-Jedis 7. Jedis Pipeline 8. Redis缓存策略 学习资料 QA 相关问题 http, socket ,tcp的区别 RdisExample 项目代码地址&#xff1a;htt…

Leetcode—104.二叉树的最大深度【简单】

2023每日刷题&#xff08;六&#xff09; Leetcode—104.二叉树的最大深度 递归实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/int maxDepth(struct TreeNode* root){…