numpy 基礎操作

来源:https://www.cnblogs.com/StitchSun/archive/2019/04/02/10622771.html
-Advertisement-
Play Games

Numpy 基礎操作¶ 以numpy的基本數據例子來學習numpy基本數據處理方法 主要內容有: 創建數組 數組維度轉換 數據選區和切片 數組數據計算 隨機數 數據合併 數據統計計算 In [1]: import numpy as np 創建一維數組¶ In [2]: data = np.arang ...


 

Numpy 基礎操作

以numpy的基本數據例子來學習numpy基本數據處理方法

主要內容有:

  • 創建數組
  • 數組維度轉換
  • 數據選區和切片
  • 數組數據計算
  • 隨機數
  • 數據合併
  • 數據統計計算
In [1]:
import numpy as np
 

創建一維數組

In [2]:
data = np.arange(15)
data
Out[2]:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
 

reshape進行維度轉換

  • data.reshape(rows, cols), 轉換的行數,列數。
  • -1表示使用預設計算,reshape(3, -1),表示三行,列數根據數據自動計算
  • reshape(-1, 5)表示5列,行數根據計算得出
In [3]:
data = data.reshape(3,5)
data
Out[3]:
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
 

np.newaxis增加維度

為數據增加維度,下麵例子展示增加了一個維度

數據變為三行,一列,垂直五的數據

In [4]:
d = data[:, np.newaxis]
d
Out[4]:
array([[[ 0,  1,  2,  3,  4]],

       [[ 5,  6,  7,  8,  9]],

       [[10, 11, 12, 13, 14]]])
In [5]:
d.shape
Out[5]:
(3, 1, 5)
In [6]:
data.shape
Out[6]:
(3, 5)
 

讀取逗號分割數據

In [7]:
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

iris_2d = np.genfromtxt(url, delimiter=',', dtype='object')
iris_2d[:10]
Out[7]:
array([[b'5.1', b'3.5', b'1.4', b'0.2', b'Iris-setosa'],
       [b'4.9', b'3.0', b'1.4', b'0.2', b'Iris-setosa'],
       [b'4.7', b'3.2', b'1.3', b'0.2', b'Iris-setosa'],
       [b'4.6', b'3.1', b'1.5', b'0.2', b'Iris-setosa'],
       [b'5.0', b'3.6', b'1.4', b'0.2', b'Iris-setosa'],
       [b'5.4', b'3.9', b'1.7', b'0.4', b'Iris-setosa'],
       [b'4.6', b'3.4', b'1.4', b'0.3', b'Iris-setosa'],
       [b'5.0', b'3.4', b'1.5', b'0.2', b'Iris-setosa'],
       [b'4.4', b'2.9', b'1.4', b'0.2', b'Iris-setosa'],
       [b'4.9', b'3.1', b'1.5', b'0.1', b'Iris-setosa']], dtype=object)
 

數據切片和類型轉換

使用[m, n]來對數據取值或者切片

  • [:, n] 取列數據
  • [m, :] 取行數據
  • [m:n, m:n] 數據切片

astype來指定數據類型

In [8]:
names = ('sepallength', 'sepalwidth', 'petallength', 'petalwidth', 'species')
sepallength = iris_2d[:, 0].astype('float')
petallength = iris_2d[:, 2].astype('float')
sepallength
Out[8]:
array([5.1, 4.9, 4.7, 4.6, 5. , 5.4, 4.6, 5. , 4.4, 4.9, 5.4, 4.8, 4.8,
       4.3, 5.8, 5.7, 5.4, 5.1, 5.7, 5.1, 5.4, 5.1, 4.6, 5.1, 4.8, 5. ,
       5. , 5.2, 5.2, 4.7, 4.8, 5.4, 5.2, 5.5, 4.9, 5. , 5.5, 4.9, 4.4,
       5.1, 5. , 4.5, 4.4, 5. , 5.1, 4.8, 5.1, 4.6, 5.3, 5. , 7. , 6.4,
       6.9, 5.5, 6.5, 5.7, 6.3, 4.9, 6.6, 5.2, 5. , 5.9, 6. , 6.1, 5.6,
       6.7, 5.6, 5.8, 6.2, 5.6, 5.9, 6.1, 6.3, 6.1, 6.4, 6.6, 6.8, 6.7,
       6. , 5.7, 5.5, 5.5, 5.8, 6. , 5.4, 6. , 6.7, 6.3, 5.6, 5.5, 5.5,
       6.1, 5.8, 5. , 5.6, 5.7, 5.7, 6.2, 5.1, 5.7, 6.3, 5.8, 7.1, 6.3,
       6.5, 7.6, 4.9, 7.3, 6.7, 7.2, 6.5, 6.4, 6.8, 5.7, 5.8, 6.4, 6.5,
       7.7, 7.7, 6. , 6.9, 5.6, 7.7, 6.3, 6.7, 7.2, 6.2, 6.1, 6.4, 7.2,
       7.4, 7.9, 6.4, 6.3, 6.1, 7.7, 6.3, 6.4, 6. , 6.9, 6.7, 6.9, 5.8,
       6.8, 6.7, 6.7, 6.3, 6.5, 6.2, 5.9])
In [9]:
petallength
Out[9]:
array([1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.6, 1.4,
       1.1, 1.2, 1.5, 1.3, 1.4, 1.7, 1.5, 1.7, 1.5, 1. , 1.7, 1.9, 1.6,
       1.6, 1.5, 1.4, 1.6, 1.6, 1.5, 1.5, 1.4, 1.5, 1.2, 1.3, 1.5, 1.3,
       1.5, 1.3, 1.3, 1.3, 1.6, 1.9, 1.4, 1.6, 1.4, 1.5, 1.4, 4.7, 4.5,
       4.9, 4. , 4.6, 4.5, 4.7, 3.3, 4.6, 3.9, 3.5, 4.2, 4. , 4.7, 3.6,
       4.4, 4.5, 4.1, 4.5, 3.9, 4.8, 4. , 4.9, 4.7, 4.3, 4.4, 4.8, 5. ,
       4.5, 3.5, 3.8, 3.7, 3.9, 5.1, 4.5, 4.5, 4.7, 4.4, 4.1, 4. , 4.4,
       4.6, 4. , 3.3, 4.2, 4.2, 4.2, 4.3, 3. , 4.1, 6. , 5.1, 5.9, 5.6,
       5.8, 6.6, 4.5, 6.3, 5.8, 6.1, 5.1, 5.3, 5.5, 5. , 5.1, 5.3, 5.5,
       6.7, 6.9, 5. , 5.7, 4.9, 6.7, 4.9, 5.7, 6. , 4.8, 4.9, 5.6, 5.8,
       6.1, 6.4, 5.6, 5.1, 5.6, 6.1, 5.6, 5.5, 4.8, 5.4, 5.6, 5.1, 5.1,
       5.9, 5.7, 5.2, 5. , 5.2, 5.4, 5.1])
 

數據運算

numpy數據運算語法與python基本一致,但是是數據中的每個數據進行運算

  • arr數據與單個數據運算,arr中每個數據與單數進行計算,返回新的arr
  • arr之間運算,arr對用位置的數據一一計算,返回新的arr
In [10]:
volume = (np.pi * petallength * (sepallength**2))/3
volume
Out[10]:
array([ 38.13265163,  35.20049849,  30.07237208,  33.23805027,
        36.65191429,  51.91167701,  31.02218026,  39.26990817,
        28.38324243,  37.71481981,  45.80442089,  38.60389053,
        33.77840421,  21.29895099,  42.27327075,  51.03517266,
        39.69716477,  38.13265163,  57.83986235,  40.85641246,
        51.91167701,  40.85641246,  22.15870018,  46.30393412,
        45.84212   ,  41.88790205,  41.88790205,  42.47433268,
        39.6427105 ,  37.01215025,  38.60389053,  45.80442089,
        42.47433268,  44.34881629,  37.71481981,  31.41592654,
        41.1810437 ,  37.71481981,  26.35586797,  40.85641246,
        34.03392041,  27.56747554,  26.35586797,  41.88790205,
        51.75145578,  33.77840421,  43.58017329,  31.02218026,
        44.12366882,  36.65191429, 241.16959604, 193.01945264,
       244.29966952, 126.71090369, 203.52284408, 153.10551797,
       195.34737279,  82.97260357, 209.83325652, 110.43326496,
        91.62978573, 153.10237638, 150.79644737, 183.14123814,
       118.22441474, 206.83827152, 147.78051842, 144.43367505,
       181.14423241, 128.0764493 , 174.97414443, 155.86488352,
       203.66002695, 183.14123814, 184.4408103 , 200.71007145,
       232.42759088, 235.04349037, 169.64600329, 119.08206953,
       120.37535851, 117.20758592, 137.38812993, 192.2654704 ,
       137.41326267, 169.64600329, 220.94088094, 182.87839155,
       134.64447234, 126.71090369, 139.38199406, 179.24461605,
       140.91090249,  86.39379797, 137.92848386, 142.89848344,
       142.89848344, 173.09337763,  81.71282492, 139.4961386 ,
       249.37962484, 179.66140067, 311.45644848, 232.75431652,
       256.61575992, 399.20846168, 113.14445942, 351.57249227,
       272.65044882, 331.14899843, 225.64489234, 227.33402199,
       266.32328122, 170.11724219, 179.66140067, 227.33402199,
       243.34253096, 415.99189683, 428.40956539, 188.49555922,
       284.18532985, 160.91656451, 415.99189683, 203.66002695,
       267.94957902, 325.72032632, 193.22051457, 190.93448231,
       240.2019855 , 314.86298211, 349.80168121, 418.27583469,
       240.2019855 , 211.97268112, 218.21083693, 378.73889114,
       232.75431652, 235.91266433, 180.95573685, 269.22820723,
       263.24870921, 254.2710846 , 179.66140067, 285.69224713,
       267.94957902, 244.44522998, 207.81635403, 230.069302  ,
       217.37307889, 185.91002846])
 

數據維度轉換

volume原來是一維的,增加維度後,變為二維

In [11]:
volume = volume[:, np.newaxis]
volume
Out[11]:
array([[ 38.13265163],
       [ 35.20049849],
       [ 30.07237208],
       [ 33.23805027],
       [ 36.65191429],
       [ 51.91167701],
       [ 31.02218026],
       [ 39.26990817],
       [ 28.38324243],
       [ 37.71481981],
       [ 45.80442089],
       [ 38.60389053],
       [ 33.77840421],
       [ 21.29895099],
       [ 42.27327075],
       [ 51.03517266],
       [ 39.69716477],
       [ 38.13265163],
       [ 57.83986235],
       [ 40.85641246],
       [ 51.91167701],
       [ 40.85641246],
       [ 22.15870018],
       [ 46.30393412],
       [ 45.84212   ],
       [ 41.88790205],
       [ 41.88790205],
       [ 42.47433268],
       [ 39.6427105 ],
       [ 37.01215025],
       [ 38.60389053],
       [ 45.80442089],
       [ 42.47433268],
       [ 44.34881629],
       [ 37.71481981],
       [ 31.41592654],
       [ 41.1810437 ],
       [ 37.71481981],
       [ 26.35586797],
       [ 40.85641246],
       [ 34.03392041],
       [ 27.56747554],
       [ 26.35586797],
       [ 41.88790205],
       [ 51.75145578],
       [ 33.77840421],
       [ 43.58017329],
       [ 31.02218026],
       [ 44.12366882],
       [ 36.65191429],
       [241.16959604],
       [193.01945264],
       [244.29966952],
       [126.71090369],
       [203.52284408],
       [153.10551797],
       [195.34737279],
       [ 82.97260357],
       [209.83325652],
       [110.43326496],
       [ 91.62978573],
       [153.10237638],
       [150.79644737],
       [183.14123814],
       [118.22441474],
       [206.83827152],
       [147.78051842],
       [144.43367505],
       [181.14423241],
       [128.0764493 ],
       [174.97414443],
       [155.86488352],
       [203.66002695],
       [183.14123814],
       [184.4408103 ],
       [200.71007145],
       [232.42759088],
       [235.04349037],
       [169.64600329],
       [119.08206953],
       [120.37535851],
       [117.20758592],
       [137.38812993],
       [192.2654704 ],
       [137.41326267],
       [169.64600329],
       [220.94088094],
       [182.87839155],
       [134.64447234],
       [126.71090369],
       [139.38199406],
       [179.24461605],
       [140.91090249],
       [ 86.39379797],
       [137.92848386],
       [142.89848344],
       [142.89848344],
       [173.09337763],
       [ 81.71282492],
       [139.4961386 ],
       [249.37962484],
       [179.66140067],
       [311.45644848],
       [232.75431652],
       [256.61575992],
       [399.20846168],
       [113.14445942],
       [351.57249227],
       [272.65044882],
       [331.14899843],
       [225.64489234],
       [227.33402199],
       [266.32328122],
       [170.11724219],
       [179.66140067],
       [227.33402199],
       [243.34253096],
       [415.99189683],
       [428.40956539],
       [188.49555922],
       [284.18532985],
       [160.91656451],
       [415.99189683],
       [203.66002695],
       [267.94957902],
       [325.72032632],
       [193.22051457],
       [190.93448231],
       [240.2019855 ],
       [314.86298211],
       [349.80168121],
       [418.27583469],
       [240.2019855 ],
       [211.97268112],
       [218.21083693],
       [378.73889114],
       [232.75431652],
       [235.91266433],
       [180.95573685],
       [269.22820723],
       [263.24870921],
       [254.2710846 ],
       [179.66140067],
       [285.69224713],
       [267.94957902],
       [244.44522998],
       [207.81635403],
       [230.069302  ],
       [217.37307889],
       [185.91002846]])
 

計算示例

In [12]:
data
Out[12]:
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
In [13]:
# 取第四列數據,每個數據+10
d = data[:,4] +10
d
Out[13]:
array([14, 19, 24])
In [14]:
d = d[:, np.newaxis]
d
Out[14]:
array([[14],
       [19],
       [24]])
 

數據縱向堆疊

  • np.hstack([data1, data2]), 把data2在列的方向上添加到data1上
  • np.vstack([data1, data2]), data2在行的方向上添加到data1上
In [15]:
np.hstack([data,d])
Out[15]:
array([[ 0,  1,  2,  3,  4, 14],
       [ 5,  6,  7,  8,  9, 19],
       [10, 11, 12, 13, 14, 24]])
 

查找數據

np.partition快速查找第n大的值

In [16]:
l=[3,4,5,2,1]
np.partition(l,kth=-4)
Out[16]:
array([1, 2, 5, 4, 3])
 

隨機數

In [17]:
b = np.random.rand(10)
b
Out[17]:
array([0.68561367, 0.01516211, 0.53513034, 0.87153709, 0.06330117,
       0.86803698, 0.11665939, 0.11038331, 0.391967  , 0.94081668])
In [18]:
b = np.random.uniform(0,10,5)
b
Out[18]:
array([2.06978576, 7.1781825 , 2.43242777, 8.59237313, 7.29724532])
In [19]:
np.random.randn(5)
Out[19]:
array([ 0.00160165,  1.16678333, -0.67973919, -0.3598035 , -0.00290401])
In [20]:
np.random.randint(0,10,5)
Out[20]:
array([8, 9, 3, 2, 4])
In [21]:
np.random.randint(0,10,5)
Out[21]:
array([2, 3, 3, 2, 4])
In [22]:
np.random.seed(5)
np.random.randint(0,10,5)
Out[22]:
array([3, 6, 6, 0, 9])
In [23]:
np.random.seed(6)
np.random.randint(0,10,5)
Out[23]:
array([9, 3, 4, 0, 9])
In [24]:
np.random.uniform(10,100,10)
Out[24]:
array([18.9524523 , 64.76262553, 57.73568176, 53.45494409, 84.2688357 ,
       77.9511675 , 45.09780233, 31.58324146, 24.00535865, 75.18958605])
In [25]:
np.random.standard_normal(10)
Out[25]:
array([-0.05607706,  0.86108782,  1.02566315,  0.60680207,  1.97193091,
       -0.47434219, -0.39388112, -0.97062796, -1.02770216,  2.08217624])
In [26]:
np.linspace(1,20, 10)
Out[26]:
array([ 1.        ,  3.11111111,  5.22222222,  7.33333333,  9.44444444,
       11.55555556, 13.66666667, 15.77777778, 17.88888889, 20.        ])
In [27]:
np.arange(0,5)
Out[27]:
array([0, 1, 2, 3, 4])
In [28]:
a = np.arange(10).reshape(10)
a
Out[28]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [29]:
a+a
Out[29]:
array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])
In [30]:
a-a
Out[30]:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
In [31]:
a*a
Out[31]:
array([ 0,  1,  4,  9, 16, 25, 36, 49, 64, 81])
In [32]:
a/a
 
c:\python36\lib\site-packages\ipykernel_launcher.py:1: RuntimeWarning: invalid value encountered in true_divide
  """Entry point for launching an IPython kernel.
Out[32]:
array([nan,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.])
In [33]:
a.dot(a)
Out[33]:
285
In [34]:
a
Out[34]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [35]:
b = np.arange(12).reshape(3,4)
b
Out[35]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
In [36]:
b[0]
Out[36]:
array([0, 1, 2, 3])
In [37]:
b[:,0]
Out[37]:
array([0, 4, 8])
In [38]:
b[0,:]
Out[38]:
array([0, 1, 2, 3])
In [39]:
b[-1]
Out[39]:
array([ 8,  9, 10, 11])
In [40]:
b.size
Out[40]:
12
In [41]:
b.shape
Out[41]:
(3, 4)
 

數據拉平

將多維數據將為一維

  • ravel 方法是返回的視圖,修改數據會影響原數據
  • flat 方法是返回原數據的copy,不會影響原數據
In [42]:
b.ravel()
Out[42]:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
In [43]:
[x for x in b.flat]
Out[43]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
In [44]:
b.flat[3]
Out[44]:
3
 

數據resize和reshape

  • reshape:有返回值,所謂有返回值,即不對原始多維數組進行修改;
  • resize:無返回值,所謂有返回值,即會對原始多維數組進行修改;
In [45]:
b.reshape(3,4)
Out[45]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
In [46]:
c = b.resize(3,4)
c
In [47]:
b
Out[47]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
 

arr平均值

np.mean(d, axis=0),計算平均值,axis來指定按那個軸運算

In [48]:
np.mean(b, axis=0)
Out[48]:
array([4., 5., 6., 7.])
In [49]:
a = np.array([1,0.2,3])
In [50]:
a
Out[50]:
array([1. , 0.2, 3. ])
In [51]:
a.dtype
Out[51]:
dtype('float64')
In [52]:
np.arange(10)
Out[52]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
 

特殊矩陣

In [53]:
np.ones((5,5))
Out[53]:
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., 1.]])
In [54]:
b
Out[54]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
In [55]:
np.ones_like(b)
Out[55]:
array([[1, 1, 1, 1],
       [1, 1, 1, 1],
       [1, 1, 1, 1]])
In [56]:
np.identity(4)
Out[56]:
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])
In [57]:
np.eye(4)
Out[57]:
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])
 

取數據示例

In [58]:
a
Out[58]:
array([1. , 0.2, 3. ])
In [59]:
b
Out[59]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
In [60]:
b[:,2]
Out[60]:
array([ 2,  6, 10])
In [61]:
# 布爾值取數據
b[b>3]
Out[61]:
array([ 4,  5,  6,  7,  8,  9, 10, 11])
In [62]:
b
Out[62]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
In [63]:
b[b==3]
Out[63]:
array([3])
In [64]:
b
Out[64]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
In [65]:
c = b[b!=3]
In [66]:
c
Out[66]:
array([ 0,  1,  2,  4,  5,  6,  7,  8,  9, 10, 11])
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 系統信息 arch 顯示機器的處理器架構(1) uname -m 顯示機器的處理器架構(2) uname -r 顯示正在使用的內核版本 dmidecode -q 顯示硬體系統部件 - (SMBIOS / DMI) hdparm -i /dev/hda 羅列一個磁碟的架構特性 hdparm -tT / ...
  • 1.安裝DHCP伺服器角色,這樣在netsh下才會有dhcp上下文 2.編寫配置dhcp的腳本 從命令行運行netsh有兩種語法: 比如要獲取已經配置的網路介面列表 1.寫全 其中:-r RemoteComputerName 是指定要操作的遠程主機或本機的電腦名,interface ipv4 是n ...
  • shutdown shutdown 此命令用來安全關閉或重啟Linux系統,系統在關閉之前會通知所有的登錄用戶,系統即將關閉,此時所有新用戶都不可以登錄。 以下截取man手冊的內容(man shutdown): NAME shutdown - bring the system down SYNOPS ...
  • 從mysql資料庫中導出正常資料庫的腳本語句,而後使用腳本語句創建資料庫的過程中,執行語句提示Can't Create Table 'XXX' erro150的錯誤,語句執行中斷,創建table失敗,仔細分析相關語句發現導致此錯誤的原因為創建的外鍵和關聯的表的主鍵類型不匹配。 仔細查看被執行的語句, ...
  • snapshot其實就是一組metadata信息的集合,它可以讓管理員將表恢復到以前的一個狀態。snapshot並不是一份拷貝,它只是一個文件名的列表,並不拷貝數據。一個全的snapshot恢復以為著你可以回滾到原來的表schema和創建snapshot之前的數據。 應用場景: 1獲取:該操作嘗試從 ...
  • [20190402]Library Cache mutex.txt1.環境:SCOTT@book> @ ver1PORT_STRING VERSION BANNER x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Editi ...
  • 本篇文章並非原創,只是看到其中內容講的非常好,搬過來,還望海涵。 原文鏈接地址:http://wpceo.com/user-database-table-design/ 說起用戶表,大概是每個應用/網站立項動工(碼農們)考慮的第一件事情。用戶表結構的設計,算是整個後臺架構的基石。如果基石不穩,待到後 ...
  • 索引模板就是將已經創建好的某個索引參數設置(settings)和索引映射(mapping)保存下來作為模板, 在創建新索引時, 指定使用某個模板就可以直接使用已經定義好的設置和映射. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...