美文网首页
第4章 NumPy基础:数组和矢量计算

第4章 NumPy基础:数组和矢量计算

作者: ghostdogss | 来源:发表于2019-03-20 14:06 被阅读0次

    Tips:

    1.ndarray是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的。每个数组都有一个shape(一个表示各维度大小的元组)和一个dtype(一个用于说明数组数据类型的对象):

    In [17]: data.shape
    Out[17]: (2, 3)
    
    In [18]: data.dtype
    Out[18]: dtype('float64')
    
    In [19]: data1 = [6, 7.5, 8, 0, 1]
    
    In [20]: arr1 = np.array(data1)
    
    In [21]: arr1
    Out[21]: array([ 6. ,  7.5,  8. ,  0. ,  1. ])
    

    2.调用astype总会创建一个新的数组(一个数据的备份),即使新的dtype与旧的dtype相同。

    In [44]: numeric_strings = np.array(['1.25', '-9.6', '42'], dtype=np.string_)
    
    In [45]: numeric_strings.astype(float)
    Out[45]: array([  1.25,  -9.6 ,  42.  ])
    

    3.传播

    In [60]: arr = np.arange(10)
    
    In [61]: arr
    Out[61]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    
    In [62]: arr[5]
    Out[62]: 5
    
    In [63]: arr[5:8]
    Out[63]: array([5, 6, 7])
    
    In [64]: arr[5:8] = 12
    
    In [65]: arr
    Out[65]: array([ 0,  1,  2,  3,  4, 12, 12, 12,  8,  9])
    

    如上所示,当你将一个标量值赋值给一个切片时(如arr[5:8]=12),该值会自动传播(也就说后面将会讲到的“广播”)到整个选区。跟列表最重要的区别在于,数组切片是原始数组的视图。这意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上。
    作为例子,先创建一个arr的切片:

    In [66]: arr_slice = arr[5:8]
    
    In [67]: arr_slice
    Out[67]: array([12, 12, 12])
    
    In [68]: arr_slice[1] = 12345
    
    In [69]: arr
    Out[69]: array([    0,     1,     2,     3,     4,    12, 12345,    12,     8,   
      9])
    

    如果你刚开始接触NumPy,可能会对此感到惊讶(尤其是当你曾经用过其他热衷于复制数组数据的编程语言)。由于NumPy的设计目的是处理大数据,所以你可以想象一下,假如NumPy坚持要将数据复制来复制去的话会产生何等的性能和内存问题。
    4.Python关键字and和or在布尔型数组中无效。要使用&与|。

    相关文章

      网友评论

          本文标题:第4章 NumPy基础:数组和矢量计算

          本文链接:https://www.haomeiwen.com/subject/dttlmqtx.html