Numpy

Numpy,第1张

Numpy
  • 可以像标量计算一样计算数组
  • 在一个ndarray里,每一个元素都是相同类型
  • 每一个数组都有一个属性shape,dtype,ndim
import numpy as np
创建Numpy
data1 = [6, 7.5, 8, 0, 1]
arr1 = np.array(data1)
arr1
array([6., 7.5, 8., 0., 1.])
print(arr1.shape)
print(arr1.ndim)
print(arr1.dtype)
(5,)
1
float64
全0 / 全1 / 全空(垃圾值)
zero_2_3 = np.zeros((2, 3))
print(zero_2_3)
[[0. 0. 0.]
 [0. 0. 0.]]
one_1_3 = np.ones((1, 3))
print(one_1_3)
[[1. 1. 1.]]
empty_2_3_2 = np.empty((2, 3, 2))
print(empty_2_3_2)
[[[3.10503618e+231 3.10503618e+231]
  [1.03753786e-322 0.00000000e+000]
  [0.00000000e+000 0.00000000e+000]]

 [[0.00000000e+000 0.00000000e+000]
  [0.00000000e+000 0.00000000e+000]
  [0.00000000e+000 0.00000000e+000]]]
np.arange( )
  • 数组版range( )
arange_ = np.arange(10)
print(arange_)
[0 1 2 3 4 5 6 7 8 9]
数组的类型变化
  • np.astype( )
  • 可以将string变成numeric
num_strings = np.array(['1.25', '-9.6', '42'], dtype=np.string_)
num_strings = num_strings.astype(float)
num_strings
array([ 1.25, -9.6 , 42.  ])
Numpy的数组算数
  • 任何两个等尺寸的数组之间的算术 *** 作都是逐元素
  • 带有标量的,都会 *** 作与每一个元素,例如1/M
  • 同尺寸数组比较,就是bool *** 作,也会逐个比较
arr = np.array([[1, 2, 3], [4, 5, 6]])
arr * arr
array([[ 1,  4,  9],
       [16, 25, 36]])
arr - arr
arr ** arr
arr / arr
1 / arr
arr ** 0.5
array([[1.        , 1.41421356, 1.73205081],
       [2.        , 2.23606798, 2.44948974]])
arr2 = np.array([[2, 1, 6],[3, 0, 2]])
arr2 > arr
array([[ True, False,  True],
       [False, False, False]])
索引与切片
  • 切片被切出来以后,是一个视图,就是俗话说的指针,改变切出来的值也会改变原来的变量
  • 若真的想要一个拷贝,而不是一个视图,就需要使用.copy()
切片
arr3 = np.array([1, 2, 3, 4, 5, 6, 7])
arr3
array([1, 2, 3, 4, 5, 6, 7])
arr3_slice = arr3[2:5]
arr3_slice
array([3, 4, 5])
arr3_slice[1] = 100
print(arr3_slice)
print(arr3)
[  3 100   5]
[  1   2   3 100   5   6   7]
arr3[4:6] = 99
print(arr3)
print(arr3_slice)
[  1   2   3 100  99  99   7]
[  3 100  99]
# .copy()
arr3_copy = arr3[3:5].copy()
arr3_copy
array([100,  99])
索引
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
# 两种方式都可以
print(arr_2d[0][1])
print(arr_2d[1, 0])
2
4
索引 + 切片
empty_2_3_2
array([[[3.10503618e+231, 3.10503618e+231],
        [1.03753786e-322, 0.00000000e+000],
        [0.00000000e+000, 0.00000000e+000]],

       [[0.00000000e+000, 0.00000000e+000],
        [0.00000000e+000, 0.00000000e+000],
        [0.00000000e+000, 0.00000000e+000]]])
empty_slice_index = empty_2_3_2[0,0:2]
empty_slice_index
array([[3.10503618e+231, 3.10503618e+231],
       [1.03753786e-322, 0.00000000e+000]])
BOOL索引
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
data = np.random.randn(7, 4)
print(names)
print(data)
['Bob' 'Joe' 'Will' 'Bob' 'Will' 'Joe' 'Joe']
[[-0.76653514  0.1674464   2.04743708  0.80417589]
 [ 0.94516431 -1.45891232 -0.49894545  1.13276983]
 [ 0.52359465  0.52882966  0.10846199 -0.31576578]
 [ 1.72629058  0.30659678  0.30496955  0.19905612]
 [ 1.11259468  1.07077902 -0.48850304 -0.62000457]
 [ 0.85144135 -0.0565551  -1.35784127  0.03526461]
 [ 0.26994239 -0.04985369 -1.13525461 -0.62994759]]
names == 'Bob'
array([ True, False, False,  True, False, False, False])
data[names == 'Bob', 2:]
array([[2.04743708, 0.80417589],
       [0.30496955, 0.19905612]])
data[names == 'Bob', 3]
array([0.80417589, 0.19905612])
神奇索引
arr = np.empty((8, 4))
for i in range(8):
    # 一次变一行
    arr[i] = i
arr
array([[0., 0., 0., 0.],
       [1., 1., 1., 1.],
       [2., 2., 2., 2.],
       [3., 3., 3., 3.],
       [4., 4., 4., 4.],
       [5., 5., 5., 5.],
       [6., 6., 6., 6.],
       [7., 7., 7., 7.]])
开始索引
magic_1 = arr[[2, 3, 5]]
magic_1
array([[2., 2., 2., 2.],
       [3., 3., 3., 3.],
       [5., 5., 5., 5.]])
magic_2 = arr[[-1, -4, -6]]
magic_2
array([[7., 7., 7., 7.],
       [4., 4., 4., 4.],
       [2., 2., 2., 2.]])
当面临多维时
arr = np.arange(32).reshape((8, 4))
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23],
       [24, 25, 26, 27],
       [28, 29, 30, 31]])
magic_3 = arr[[2, 3, 6],[1, 3, 2]]
magic_3
array([2., 3., 6.])
转置和内积
  • np.dot
  • np.T
arr = np.arange(15).reshape((5, 3))
arr
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11],
       [12, 13, 14]])
arr_T = arr.T
arr_T
array([[ 0,  3,  6,  9, 12],
       [ 1,  4,  7, 10, 13],
       [ 2,  5,  8, 11, 14]])
Dot = np.dot(arr_T, arr)
Dot
array([[270, 300, 330],
       [300, 335, 370],
       [330, 370, 410]])

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/873833.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存