精华内容
下载资源
问答
  • python二维多维列表深拷贝python一维数组拷贝方法python二维数组拷贝方法 python一维数组拷贝方法 我们都知道如果直接使用等号进行列表赋值将会导致两个列表共享内存而导致修改其中一个另外一个都会相应改变,...

    python一维数组拷贝方法

    我们都知道如果直接使用等号进行列表赋值将会导致两个列表共享内存而导致修改其中一个另外一个都会相应改变,所以我们常用切片赋值进行深拷贝,也就是a=b[:]这种方法(假设b= [1,2,3]),这样两者就完全区别开不再相互影响。于是我们自然想到对于二维数组是否可以同样操作实现深拷贝,博主在使用的时候却发现了不一样的地方。如下:

    grid = [[1,3,1],[1,5,1],[4,2,1]]
    dp1 = grid[:][:]
    dp1[0][0] = 2
    ->grid:[[2,3,1],[1,5,1],[4,2,1]]
    ->dp1:[[2,3,1],[1,5,1],[4,2,1]]
    

    可以看到两者同时发生了改变,那应该怎么复制才能实现深拷贝呢?

    python二维数组拷贝方法

    可以像下面这样:

    grid = [[1,3,1],[1,5,1],[4,2,1]]
    dp = [[grid[i][j] for j in range(len(grid[0]))] for i in range(len(grid))]
    dp[0][0] = 3
    ->grid:[[1,3,1],[1,5,1],[4,2,1]]
    ->dp1:[[3,3,1],[1,5,1],[4,2,1]]
    

    可以看到两个数组不再互相关联,实现了深拷贝,但是这样略显麻烦,博主还会继续探索,有了新的发现还会发出来!

    展开全文
  • python列表和Numpy数组的区别

    千次阅读 2019-03-09 23:22:52
    Table of Contents python列表和Numpy数组的区别 array的创建 元素访问 array的一维数组的访问方式 ...array的二维数组的访问方式 ...python列表和Numpy数组的区别 ...Python列表可以存储一维数组,通过列表...

    Table of Contents

     

    python列表和Numpy数组的区别

    array的创建

    元素访问

    array的一维数组的访问方式

    array的二维数组的访问方式

    参考链接


    python列表和Numpy数组的区别

    1二者都可以用于处理多维数组。

    Numpy中的ndarray对象用于处理多维数组,它作为一个快速而灵活的大数据容器。Python列表可以存储一维数组,通过列表的嵌套可以实现多维数组。

    2存储效率和输入输出性能不同。

    Numpy专门针对数组的操作和运算进行了设计,存储效率和输入输出性能远优于Python中的嵌套列表,数组越大,Numpy的优势就越明显。

    3元素数据类型。

    通常,Numpy数组中的所有元素的类型都必须相同的,而Python列表中的元素类型是任意的,所以在通用性能方面Numpy数组不及Python列表,但在科学计算中,可以省掉很多循环语句,代码使用方面比Python列表简单的多。

     

    array的创建

    Numpy数组创建时,参数既可以是list,也可以是元组。例如:

    >>> a=np.array((1,2,3))#参数是tuple
    
    >>> b=np.array([6,7,8])#参数是list
    
    >>> c=np.array([[1,2,3],[4,5,6]])#参数是二维list

    除此之外,还可以使用numpy提供的其他方法创建一个数组,例如:

    >>> arr1=np.arange(1,10,1)
    
    >>> arr2=np.linspace(1,10,10)

    np.arange(a,b,c)表示产生从a-b不包括b,间隔为c的一个array,数据类型默认是int32。但是linspace(a,b,c)表示的是把a-b平均分成c分,它包括b。

    今天读程序关于步长的运用:

    ['%x' %int(''.join(avg_list[x:x+4]),2) for x in range(0,32*32,4)]

    这个是感知哈希算法的一个步骤,将二进制数据改写为十六进制,以便于下一步的判断。这里我的一个二进制数据的长度是32×32,且二进制转十六进制可以每隔4位来转,所以就可以将步长设置为4.

    从函数规则创建数组也非常方便,numpy的fromfunction函数可以实现这个功能:

    >>> def f(x,y):
    
    ... return 10*x+y
    
    ... b=np.fromfunction(f,(2,2))

    该函数的具体内容如下:

     

    参数

     

    function:

    第一个参数是一个函数,例如上例中给出的f。

    这个函数接受了N个参数,每个参数表示沿特定轴变化的阵列的坐标。例如上例中,第二个参数(2,2),那么这N个参数就是:(0,0)(0,1)(1,0)(1,1)。

     

    shape:

    第二个参数是一个元组,表示了数组的大小。

     

    dtype:

    第三个参数决定了传递给函数的数据类型,默认为浮点型。

     

     

    返回值

     

    返回一个数组。

     

    元素访问

    array的一维数组的访问方式

    定义一个一维数组,

    arr=np.array([0,1,2,3,4,5,6,7,8,9])

    arr[5]

    访问第6个元素

    #结果:5

    arr[3:5]

    访问第4-5个元素

    #结果:array([3,4])

    arr[:5]

    访问前5元素

    #结果:array([0,1,2,3,4])

    arr[:-1]

    访问除了最后一个元素之外的元素

    #结果:array([0,1,2,3,4,5,6,7,8])

    arr[:]

    访问全部

    #结果:array([0,1,2,3,4,5,6,7,8,9])

    arr[2:4]=100

    将3-4个元素置为100

    #结果:array([0,1,100,100,4,5,6,7,8,9])

    arr[1:-1:2]

    访问从第一个到最后一个的元素,步长为2

    #结果:array([1,100,5,7])

    arr[::-1]

    访问从第一个到最后一个的元素,步长为-1

    #结果:array([9,8,7,6,5,4,100,100,1,0])

     

    其中,arr[a:b:n]表示按步长为n取从a到b的元素,当n为-1的时候,从右向左访问。

    array的二维数组的访问方式

    对于二维数组arr=np.array([[1,2,3],[4,5,6]]),我们可以通过一下的方式访问:

    arr[1:2]

    返回第一行

    #结果:[[1,2,3]]

    arr[1:2][0]

    返回第一行

    #结果:[1,2,3]

    arr[1]

    返回第一行

    #结果:[1,2,3]

    以上的语句都返回了二维数组的第一行,但是凡是通过“:”访问的,最终都在外面加了“[ ]”,可以像第2语句那样,再用一个索引得到最终的结果。

    这里,我想起来最近截取图片的一个例子。

    通常,我们用imread的图片就保存在一个数组对象中,例如:img=[[0,1,2], [3,4,5],[6,7,8]].现在我想截取这个图片的(0,0)到(1,1)矩形区域,可以通过下面的语句完成:img[0:1,0:1].截取下的结果就是[[0,1],[3,4]].

    另外,还有一个需要注意的点:array的索引最终产生的是一个「 原始数据的浅拷贝」,他和原始数据共用一块内存。

    >>> import numpy as np
    
    >>> a=np.array([0,1,2])
    
    >>> b=a[:2]
    
    >>> b
    
    array([0, 1])
    
    >>> b[0]=100
    
    >>> b
    
    array([100, 1])
    
    >>> a
    
    array([100, 1, 2])
    

    当我们修改了b的第一个元素的时候,a的第一个元素也被修改了。因为他们都是指向的同一个内存。

    这是因为当我们执行b=a[:2]等语句的时候,拷贝的是指向这个元素的指针,当我们想要修改的时候,也是修改了指针指向的元素值。
     

    >>> a=[0,1,2]
    
    >>> b=a[:2]
    
    >>> b
    
    [0, 1]
    
    >>> b[0]=100
    
    >>> b
    
    [100, 1]
    
    >>> a
    
    [0, 1, 2]
    
    

    与之不同的是,list对象在执行的时候拷贝了数据与指针,就不会有这种状况啦。

    除了上面介绍的这种根据索引访问元素的方法,array还有自己更为优秀的方法!

    1使用布尔数组

    >>> a=np.array([0,1,2,3,4,5,6])
    
    >>> b=a>3
    
    >>> b
    
    array([False, False, False, False, True, True, True])
    
    >>> a[b]
    
    array([4, 5, 6])
    
    

    值得注意的是,这种方法只适用于数组,list没有资格。如上例所示,布尔索引最终返回的是下标为True的数据。

    2列表索引

    >>> a=np.array(['a','b','c','d','e'])
    
    >>> a
    
    array(['a', 'b', 'c', 'd', 'e'], dtype='<U1')
    
    >>> b=[0,1]
    
    >>> a[b]
    
    array(['a', 'b'], dtype='<U1')
    
    >>> 

    列表索引适用于数组和list对象。

    以上两个「花式索引」他们都不和原来的数据共享内存。

     

    今天这篇笔记主要是想要总结一下array和list的区别。

    一个python元素其实是一个指向这个包含所有python object信息的内存的位置指针。

    list:一个指向一系列指针块的指针,其中每个指针都指向一个完整的python object-对象,例如integer。每一个list 元素是一个包括数据和信息类型的完整结构。所以列表可以填充任意类型的数据。

    numpy.array:底层是C语言。有步长strides,dimensions,data三属性。他的元素类型固定,缺乏灵活,但是更方便进行存储和处理数据。

    参考链接

    [1]https://blog.csdn.net/wyl1813240346/article/details/79806207

    [2]https://blog.csdn.net/liyaohhh/article/details/51055147#reply

    [3]https://docs.scipy.org/doc/numpy-dev/user/quickstart.html

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 宾夕法尼亚州地区客户在本节我将用宾夕法尼亚州地区客户的子集维度来解释第种维度子集的类型。我也将向你说明如何测试该子集维度。相对的,个向上钻取的包含了它基础的所有更高级别的数据。而个特定子集...

    宾夕法尼亚州地区客户维

    在本节我将用宾夕法尼亚州地区客户的子集维度来解释第二种维度子集的类型。我也将向你说明如何测试该子集维度。

    相对的,一个向上钻取的维包含了它基础维的所有更高级别的数据。而一个特定子集维度则选择了它基础维的某个特定的数据集合。列表12-3所示的脚本产生并加载了宾夕法尼亚州(PA)地区客户子集维。

    注意到,有两个事情是宾夕法尼亚州地区客户子集维区别于月份子集维的地方。

    npa_customer_dim表和customer_dim表的字段结构一样,而month_dim表没有 date_dim表中的日期字段。

    npa_customer_dim表的代理键是客户表的代理键。Month_dim表的代理键只属于month_dim表,并不是来自日期维表。

    列表12-3 PA的客户:

    /**********************************************************************/

    /**/

    /* pa_customer.sql*/

    /**/

    /**********************************************************************/

    USE dw;

    CREATE TABLE pa_customer_dim

    ( customer_sk INT NOT NULL AUTO_INCREMENT PRIMARY KEY

    , customer_number INT

    , customer_name CHAR (50)

    , customer_street_address CHAR (50)

    , customer_zip_code INT (5)

    , customer_city CHAR (30)

    , customer_state CHAR (2)

    , shipping_address CHAR (50)

    , shipping_zip_code INT (5)

    , shipping_city CHAR (30)

    , shipping_state CHAR (2)

    , effective_date DATE

    , expiry_date DATE )

    ;

    INSERT INTO pa_customer_dim

    SELECT

    customer_sk

    , customer_number

    , customer_name

    , customer_street_address

    , customer_zip_code

    , customer_city

    , customer_state

    , shipping_address

    , shipping_zip_code

    , shipping_city

    , shipping_state

    , effective_date

    , expiry_date

    FROM customer_dim

    WHERE customer_state = 'PA'

    ;

    /* end of script*/

    为了测试PA子维脚本,你需要先用列表12-4的脚本来增加三个居住于俄亥俄州的客户。

    列表12-4:非PA客户:

    /**********************************************************************/

    /**/

    /* non_pa_customer.sql*/

    /**/

    /**********************************************************************/

    /* default to dw*/

    USE dw;

    INSERT INTO customer_dim

    ( customer_sk

    , customer_number

    , customer_name

    , customer_street_address

    , customer_zip_code

    , customer_city

    , customer_state

    , shipping_address

    , shipping_zip_code

    , shipping_city

    , shipping_state

    , effective_date

    , expiry_date )

    VALUES

    (NULL, 10, 'Bigger Customers', '7777 Ridge Rd.', '44102',

    'Cleveland', 'OH', '7777 Ridge Rd.', '44102', 'Cleveland',

    'OH', CURRENT_DATE, '9999-12-31')

    , (NULL, 11, 'Smaller Stores', '8888 Jennings Fwy.', '44102',

    'Cleveland', 'OH', '8888 Jennings Fwy.', '44102',

    'Cleveland', 'OH', CURRENT_DATE, '9999-12-31')

    , (NULL, 12, 'Small-Medium Retailers', '9999 Memphis Ave.', '44102',

    'Cleveland', 'OH', '9999 Memphis Ave.', '44102', 'Cleveland',

    'OH', CURRENT_DATE, '9999-12-31')

    ;

    /* end of script*/

    用以下命令运行列表12-4中的脚本。

    mysql> \. c:\mysql\scripts\non_pa_customer.sql

    在你的控制台上将得到下面的响应信息:

    Database changed

    Query OK, 3 rows affected (0.86 sec)

    Records: 3Duplicates: 0Warnings: 0

    现在你已经准备好运行列表12-3中的pa_customer.sql脚本,在你做这些之前,确定你的Msql数据库的日期仍然是2007-03-02。

    你可以用如下命令方式运行pa_customer.sql脚本。

    mysql> \. c:\mysql\scripts\pa_customer.sql

    你将在控制台上看到:

    Database changed

    Query OK, 0 rows affected (0.20 sec)

    Query OK, 18 rows affected (0.08 sec)

    Records: 18 Duplicates: 0 Warnings: 0

    为了确保三个OH客户已经成功的载入,查询customer_dim表:

    mysql> select customer_name, customer_state, effective_date from customer_dim;

    控制台上将看到:

    +---------------------------------+----------------+---------------+

    | customer_name| customer_state | effective_date|

    +---------------------------------+----------------+---------------+

    | Really Large Customers| PA| 2005-03-01|

    | Small Stores| PA| 2005-03-01|

    | Medium Retailers| PA| 2005-03-01|

    | Good Companies| PA| 2005-03-01|

    | Wonderful Shops| PA| 2005-03-01|

    | Extremely Loyal Clients| PA| 2005-03-01|

    | Distinguished Agencies| PA| 2005-03-01|

    | Extremely Loyal Clients| PA| 2007-03-01|

    | Subsidiaries| PA| 2007-03-01|

    | Really Large Customers| PA| 2007-03-02|

    | Small Stores| PA| 2007-03-02|

    | Medium Retailers| PA| 2007-03-02|

    | Good Companies| PA| 2007-03-02|

    | Wonderful Shops| PA| 2007-03-02|

    | Extremely Loyal Clients| PA| 2007-03-02|

    | Distinguished Agencies| PA| 2007-03-02|

    | Subsidiaries| PA| 2007-03-02|

    | Online Distributors| PA| 2007-03-02|

    | Bigger Customers| OH| 2007-03-02|

    | Smaller Stores| OH| 2007-03-02|

    | Small-Medium Retailers| OH| 2007-03-02|

    +---------------------------------+----------------+---------------+

    21 rows in set (0.00 sec)

    现在查询pa_customer_dim表来确定只有PA的客户在PA客户维表中。

    mysql> select customer_name, customer_state, effective_date from pa_customer_dim;

    结果如下:

    +---------------------------------+----------------+---------------+

    | customer_name| customer_state | effective_date|

    +---------------------------------+----------------+---------------+

    | Really Large Customers| PA| 2004-01-01|

    | Small Stores| PA| 2004-01-01|

    | Medium Retailers| PA| 2004-01-01|

    | Good Companies| PA| 2004-01-01|

    | Wonderful Shops| PA| 2004-01-01|

    | Extremely Loyal Clients| PA| 2004-01-01|

    | Distinguished Agencies| PA| 2004-01-01|

    | Extremely Loyal Clients| PA| 2005-11-01|

    | Subsidiaries| PA| 2005-11-01|

    | Really Large Customers| PA| 2005-11-03|

    | Small Stores| PA| 2005-11-03|

    | Medium Retailers| PA| 2005-11-03|

    | Good Companies| PA| 2005-11-03|

    | Wonderful Shops| PA| 2005-11-03|

    | Extremely Loyal Clients| PA| 2005-11-03|

    | Distinguished Agencies| PA | 2005-11-03|

    | Subsidiaries| PA| 2005-11-03|

    | Online Distributors| PA| 2005-11-03|

    +---------------------------------+----------------+---------------+

    18 rows in set (0.00 sec)

    正如你所看到的,只有PA客户进入到该表中,之前加入的OH客户并没有在其中。

    修改定期装载

    当一个新的PA客户资料加入到客户维中时,为了能够同时加入PA客户维表,你需要把PA客户子集维的装载合并到数据仓库的定期装载过程中。修改后的定期装载脚本将在列表12-5中列出。这个改变(新增)用粗体显示。注意到,当每次你运行每日的定期装载脚本时,该脚本重建(截断,然后加入所有的PA客户)了PA客户子集维。

    列表12-5:修正后的每日DW定期装载

    /******************************************************************/

    /**/

    /* dw_regular_12.sql*/

    /**/

    /******************************************************************/

    USE dw;

    /* CUSTOMER_DIM POPULATION*/

    TRUNCATE customer_stg;

    LOAD DATA INFILE 'customer.csv'

    INTO TABLE customer_stg

    FIELDS TERMINATED BY ' , '

    OPTIONALLY ENCLOSED BY '"'

    LINES TERMINATED BY '\r\n'

    IGNORE 1 LINES

    ( customer_number

    , customer_name

    , customer_street_address

    , customer_zip_code

    , customer_city

    , customer_state

    , shipping_address

    , shipping_zip_code

    , shipping_city

    , shipping_state )

    ;

    /* SCD 2 ON ADDRESSES*/

    UPDATE

    customer_dim a

    , customer_stg b

    SET

    a.expiry_date = SUBDATE (CURRENT_DATE, 1)

    WHERE

    a.customer_number = b.customer_number

    AND (a.customer_street_address <> b.customer_street_address

    OR a.customer_city <> b.customer_city

    OR a.customer_zip_code <> b.customer_zip_code

    OR a.customer_state <> b.customer_state

    OR a.shipping_address <> b.shipping_address

    OR a.shipping_city <> b.shipping_city

    OR a.shipping_zip_code <> b.shipping_zip_code

    OR a.shipping_state <> b.shipping_state

    OR a.shipping_address IS NULL

    OR a.shipping_city IS NULL

    OR a.shipping_zip_code IS NULL

    OR a.shipping_state IS NULL)

    AND expiry_date = '9999-12-31'

    ;

    INSERT INTO customer_dim

    SELECT

    NULL

    , b.customer_number

    , b.customer_name

    , b.customer_street_address

    , b.customer_zip_code

    , b.customer_city

    , b.customer_state

    , b.shipping_address

    , b.shipping_zip_code

    , b.shipping_city

    , b.shipping_state

    , CURRENT_DATE

    , '9999-12-31'

    FROM

    customer_dim a

    , customer_stg b

    WHERE

    a.customer_number = b.customer_number

    AND (a.customer_street_address <> b.customer_street_address

    OR a.customer_city <> b.customer_city

    OR a.customer_zip_code <> b.customer_zip_code

    OR a.customer_state <> b.customer_state

    OR a.shipping_address <> b.shipping_address

    OR a.shipping_city <> b.shipping_city

    OR a.shipping_zip_code <> b.shipping_zip_code

    OR a.shipping_state <> b.shipping_state

    OR a.shipping_address IS NULL

    OR a.shipping_city IS NULL

    OR a.shipping_zip_code IS NULL

    OR a.shipping_state IS NULL)

    AND EXISTS (

    SELECT *

    FROM customer_dim x

    WHERE b.customer_number = x.customer_number

    AND a.expiry_date - SUBDATE (CURRENT_DATE, 1))

    AND NOT EXISTS (

    SELECT *

    FROM customer_dim y

    WHEREb.customer_number = y.customer_number

    AND y.expiry_date - '9999-12-31')

    ;

    /* END OF SCD 2*/

    /* SCD 1 ON NAME*/

    UPDATE customer_dim a, customer_stg b

    SET a.customer_name = b.customer_name

    WHEREa.customer_number = b.customer_number

    AND a.expiry_date - '9999-12-31'

    AND a.customer_name <> b.customer_name

    ;

    /* ADD NEW CUSTOMER*/

    INSERT INTO customer_dim

    SELECT

    NULL

    , customer_number

    , customer_name

    , customer_street_address

    , customer_zip_code

    , customer_city

    , customer_state

    , shipping_address

    , shipping_zip_code

    , shipping_city

    , shipping_state

    , CURRENT_DATE

    , '9999-12-31'

    FROM customer_stg

    WHERE customer_number NOT IN(

    SELECT a.customer_number

    FROM

    customer_dim a

    , customer_stg b

    WHERE b.customer_number = a.customer_number )

    /* RE-BUILD PA CUSTOMER DIMENSION*/

    TRUNCATE pa_customer_dim;

    INSERT INTO pa_customer_dim

    SELECT

    customer_sk

    , customer_number

    , customer_name

    , customer_street_address

    , customer_zip_code

    , customer_city

    , customer_state

    , shipping_address

    , shipping_zip_code

    , shipping_city

    , shipping_state

    , effective_date

    , expiry_date

    FROM customer_dim

    WHERE customer_state = 'PA'

    ;

    /* END OF CUSTOMER_DIM POPULATION*/

    /* product dimension loading*/

    TRUNCATE product_stg

    ;

    LOAD DATA INFILE 'product.txt'

    INTO TABLE product_stg

    FIELDS TERMINATED BY ''

    OPTIONALLY ENCLOSED BY ''

    LINES TERMINATED BY '\r\n'

    IGNORE 1 LINES

    ( product_code

    , product_name

    , product_category )

    ;

    /* PRODUCT_DIM POPULATION*/

    /* SCD2 ON PRODUCT NAME AND GROUP*/

    UPDATE

    product_dim a

    , product_stg b

    SET

    expiry_date = SUBDATE (CURRENT_DATE, 1)

    WHERE

    a.product_code = b.product_code

    AND (a.product_name <> b.product_name

    OR a.product_category <> b.product_category )

    AND expiry_date = '9999-12-31'

    ;

    INSERT INTO product_dim

    SELECT

    NULL

    , b.product_code

    , b.product_name

    , b.product_category

    , CURRENT_DATE

    , '9999-12-31'

    FROM

    product_dim a

    , product_stg b

    WHERE

    a.product_code = b.product_code

    AND (a.product_name <> b.product_name

    OR a.product_category <> b.product_category )

    AND EXISTS (

    SELECT *

    FROM product_dim x

    WHERE b.product_code = x.product_code

    AND a.expiry_date = SUBDATE (CURRENT_DATE, 1) )

    AND NOT EXISTS (

    SELECT *

    FROM product_dim y

    WHERE b.product_code = y.product_code

    AND y.expiry_date = '9999-12-31')

    ;

    /* END OF SCD 2*/

    /* ADD NEW PRODUCT*/

    INSERT INTO product_dim

    SELECT

    NULL

    , product_code

    , product_name

    , product_category

    , CURRENT_DATE

    , '9999-12-31'

    FROM product_stg

    WHERE product_code NOT IN(

    SELECT y.product_code

    FROM product_dim x, product_stg y

    WHERE x.product_code = y.product_code

    ;

    /* END OF PRODUCT_DIM POPULATION*/

    /* ORDER_DIM POPULATION*/

    INSERT INTO order_dim (

    order_sk

    , order_number

    , effective_date

    , expiry_date

    )

    SELECT

    NULL

    , order_number

    , order_date

    , '9999-12-31'

    FROM source.sales_order

    WHERE entry_date = CURRENT_DATE

    ;

    /* END OF ORDER_DIM POPULATION*/

    /* SALES_ORDER_FACT POPULATION*/

    INSERT INTO sales_order_fact

    SELECT

    order_sk

    , customer_sk

    , product_sk

    , date_sk

    , order_amount

    , order_quantity

    FROM

    source.sales_order a

    , order_dim b

    , customer_dim c

    , product_dim d

    , date_dim e

    WHERE

    a.order_number = b.order_number

    AND a.customer_number = c.customer_number

    AND a.order_date >= c.effective_date

    AND a.order_date <= c.expiry_date

    AND a.product_code = d.product_code

    AND a.order_date >= d.effective_date

    AND a.order_date <= d.expiry_date

    AND a.order_date = e.date

    AND a.entry_date = CURRENT_DATE

    ;

    /* end of script*/

    测试修正后的定期装载

    现在你可以测试列表12-5的脚本。在你实施之前,先增加一些客户数据,通过运行列表12-6的脚本增加一个PA客户和一个OH客户到客户维中。

    列表12-6:增加两个客户

    /******************************************************************/

    /**/

    /* two_more_customers.sql*/

    /**/

    /******************************************************************/

    /* default to dw*/

    USE dw;

    INSERT INTO customer_dim

    ( customer_sk

    , customer_number

    , customer_name

    , customer_street_address

    , customer_zip_code

    , customer_city

    , customer_state

    , shipping_address

    , shipping_zip_code

    , shipping_city

    , shipping_state

    , effective_date

    , expiry_date )

    VALUES

    (NULL, 13, 'PA Customer', '1111 Louise Dr.', '17050',

    'Mechanicsburg', 'PA', '1111 Louise Dr.', '17050',

    'Mechanicsburg', 'PA', CURRENT_DATE, '9999-12-31')

    , (NULL, 14, 'OH Customer', '6666 Ridge Rd.', '44102',

    'Cleveland', 'OH', '6666 Ridge Rd.', '44102',

    'Cleveland', 'OH', CURRENT_DATE, '9999-12-31')

    ;

    /* end of script*/

    现在运行列表12-6中的脚本:

    mysql> \. c:\mysql\scripts\two_more_customers.sql

    Mysql将显示有两个记录生效。

    Database changed

    Query OK, 2 rows affected (0.06 sec)

    Records: 2Duplicates: 0Warnings: 0

    现在更改你的Msql数据库的日期为2007-03-03以保证老的数据不会重新载入,然后运行dw_regular_12.sql脚本。

    mysql> \. c:\mysql\scripts\dw_regular_12.sql

    你将看到你的控制台有如下显示:

    Database changed

    Query OK, 9 rows affected (0.15 sec)

    Query OK, 9 rows affected (0.14 sec)

    Records: 9Deleted: 0Skipped: 0Warnings: 0

    Query OK, 0 rows affected (0.05 sec)

    Rows matched: 0Changed: 0Warnings: 0

    Query OK, 0 rows affected (0.01 sec)

    Records: 0Duplicates: 0Warnings: 0

    Query OK, 0 rows affected (0.00 sec)

    Rows matched: 0Changed: 0Warnings: 0

    Query OK, 0 rows affected (0.00 sec)

    Records: 0Duplicates: 0Warnings: 0

    Query OK, 18 rows affected (0.04 sec)

    Query OK, 19 rows affected (0.06 sec)

    Records: 19Duplicates: 0Warnings: 0

    Query OK, 4 rows affected (0.09 sec)

    Query OK, 4 rows affected (0.07 sec)

    Records: 4Deleted: 0Skipped: 0Warnings: 0

    Query OK, 0 rows affected (0.06 sec)

    Rows matched: 0Changed: 0Warnings: 0

    Query OK, 0 rows affected (0.00 sec)

    Records: 0Duplicates: 0Warnings: 0

    Query OK, 0 rows affected (0.00 sec)

    Records: 0Duplicates: 0Warnings: 0

    Query OK, 0 rows affected (0.15 sec)

    Records: 0 Duplicates: 0Warnings: 0

    Query OK, 0 rows affected (0.17 sec)

    Records: 0Duplicates: 0Warnings: 0

    现在用该语句查询pa_customer_dim表。你将看到新的PA客户被插入到表中。

    mysql> select customer_name, customer_state, effective_date from pa_customer_dim;

    这是结果:

    +-------------------------+----------------+---------------+

    | customer_name| customer_state | effective_date|

    +-------------------------+----------------+---------------+

    | Really Large Customers| PA| 2005-03-01|

    | Small Stores| PA| 2005-03-01|

    | Medium Retailers| PA| 2005-03-01|

    | Good Companies| PA| 2005-03-01|

    | Wonderful Shops| PA| 2005-03-01|

    | Extremely Loyal Clients | PA| 2005-03-01|

    | Distinguished Agencies| PA| 2005-03-01|

    | Extremely Loyal Clients | PA| 2007-03-01|

    | Subsidiaries| PA| 2007-03-01|

    | Really Large Customers| PA| 2007-03-02|

    | Small Stores| PA| 2007-03-02|

    | Medium Retailers| PA| 2007-03-02|

    | Good Companies| PA| 2007-03-02|

    | Wonderful Shops| PA| 2007-03-02|

    | Extremely Loyal Clients | PA| 2007-03-02|

    | Distinguished Agencies| PA| 2007-03-02|

    | Subsidiaries| PA| 2007-03-02|

    | Online Distributors| PA| 2007-03-02|

    | PA Customer| PA| 2007-03-03|

    +-------------------------+----------------+---------------+

    19 rows in set (0.00 sec)

    小结

    在这章,你学习了两种类型的子集维。月份子集维是向上钻取维的一个例子,一个装载自比它更为详细的基础维的具有更高级的维。PA客户维是一个特定的子集维;只从它的基础维选择PA客户数据进行装载。

    下一章,你将学习另外一个复用现有维的技术,叫角色扮演维度。

    展开全文
  • Numpy 简介importnumpyasnpNumpy...多维数组是线性代数中非常广泛的概念,如一维数组就是向量,二维数组是矩阵。在数组中,要求所有元素必须是同一类型,这是与列表与字典的区别之一一。针对数组,通过Numpy可以实现...

    Numpy 简介

    import numpy as np

    Numpy是应用Python进行科学计算的基础库。它的功能包括多维数组、基本线性代数、基本统计计算、随机模拟等。Numpy的核心功能是ndarray 类,即多维数组。多维数组是线性代数中非常广泛的概念,如一维数组就是向量,二维数组是矩阵。在数组中,要求所有元素必须是同一类型,这是与列表与字典的区别之一一。针对数组,通过Numpy可以实现的基本操作包括数组的创建、数组切片、数组重组、数组运算等。

    01

    数组的创建

    常见的创建数组的方法之一:转换Python的列表、元组等数据结构为数组类型。下面实例给出了创建数组的常用命令。
    >>> import numpy as np  # 载入Numpy库简写为"np">>> arr1 = np.array([1,2,3,4,5,6])>>> arr1array([1, 2, 3, 4, 5, 6])>>> type(arr1) # 查看数据类型numpy.ndarray>>> arr1.shape  # 各个维度的数组长度(6,)>>> arr2 = np.array([[1,2,3],[4,5,6]])>>> arr2 array([[1, 2, 3],       [4, 5, 6]])>>> arr2.shape(2, 3)
    另外,还可以利用Numpy的内置函数来直接创建数组。
    >>> arr3 = np.arange(0,1,0.1)>>> arr3array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9])# 创建一维长度为2,二维长度为3的元素全为0的数组>>> arr4 = np.zeros((2,3)) >>> arr4 array([[ 0.,  0.,  0.],       [ 0.,  0.,  0.]])# 创建一维长度为2,二维长度为3的元素全为1的二维数组>>> arr5 = np.ones((2,3)) >>> arr5array([[ 1.,  1.,  1.],       [ 1.,  1.,  1.]])# 创建一维长度为2,二维长度为3的二维空数组>>> arr6 = np.empty([2,3]) >>> arr6array([[ 1.,  1.,  1.],       [ 1.,  1.,  1.]]) # 从[0,1]区间的均匀分布随机抽取四个数>>> arr7 = np.random.rand(4)>>> arr7array([ 0.36570416,  0.83097711,  0.98761922,  0.87057992])# 生成一个标准正态分布的4*4样本值>>> arr8 = np.random.normal(size=(4,4)) >>> arr8array([[-0.15990639,  0.7088309 , -0.20267733,  2.14992874],       [ 0.05542048, -1.15103197,  0.21129526,  0.6212253 ],       [-1.31547565,  1.4401065 ,  0.6680733 , -0.60608497],       [-1.03471769,  0.55338916, -0.05869825,  0.61610795]])
    注意这里的 np.arange() 可以指定步长为(0,1)为小数,而Python内置函数range 无此功能。另外,np.random 中包括多种概率分布的随机样本,是数据分析辅助的重点工具之一。

    02

    数组的切片与索引

    数组的截取与 list 相同,可以通过 [] 来指定每个维度的索引。
    >>> import numpy as np>>> a = np.array([[1,2,3,4,5],[6,7,8,9,10]])>>> print(a)[[ 1  2  3  4  5] [ 6  7  8  9 10]]>>> print(a[0:1])  # 截取第一行[[1 2 3 4 5]]>>> print(a[1,2:5]) # 截取第二行,第三、四、五列[ 8  9 10]>>> print(a[1:]) # 截取第二行[[ 6  7  8  9 10]]
    另外,在应用中经常需要返回满足给定条件的数组元素。为此,下面介绍一个按照条件索引的数组操作。
    >>> b = a[a>6] # 截取矩阵中大于6的元素,范围是一维数组>>> print(b)[ 7  8  9 10]

    03

    数组重组

    数组重组主要是指对原来数组进行修改,具体包括数组类型修改、数组维度修改与数组元素修改。
    >># 数组元素的数据类型为字符串>>> num_str1 = np.array(['1.2','2.4','3.6'],dtype=np.string_)>>> # 利用astype转换为浮点型>>> num_str1.astype(float)array([ 1.2,  2.4,  3.6])>>> data = np.arange(6)>>> # 利用reshape 指定新数组各个维度>>> data = data.reshape(2,3)  >>> dataarray([[0, 1, 2],       [3, 4, 5]])>>> # data中小于3的元素用0代替,否则用1代替>>> np.where(data < 3,0,1) array([[0, 0, 0],       [111]])
    这里 np.where(condition,x,y) 函数是三元表达式:满足条件(condition),输出 x ,不满足输出 y

    04

     数组运算

    数学中的加减乘除运算同样也使用于数组。在数组中是按照元素级进行批量运算的,下面挑选几个实例来说明这一点:
    >>> arr7 = np.array([[1,2,3],[4,5,6]])>>> arr7array([[1, 2, 3],       [4, 5, 6]])>>> arr7 * 2    # 数组的每个每个元素都乘以2array([[ 2,  4,  6],       [ 8, 10, 12]])>>> arr7*arr7   # 两个数组对应的元素进行运算array([[ 1,  4,  9],       [16, 25, 36]])>>> np.log(arr7)  # 数组的每个元素都取 logarray([[ 0.        ,  0.69314718,  1.09861229],       [ 1.38629436,  1.60943791,  1.79175947]])
    除了上述简单的元素级运算,数组也可以进行各种矩阵运算,如矩阵向量的混合运算、矩阵求逆、矩阵行列式、矩阵特征值。
    >>> A = np.array([[0,1],[2,3]])>>> Aarray([[0, 1],       [2, 3]])>>> v = np.array([1,2])>>> varray([12])>>> v.dot(A)  # dot是内积运算,运算规则与线性代数相同array([4, 7])>>> A.dot(v)  # 这里v看作列变量array([28])
    Numpy 库为Python中的数组运算提供了很多便捷,这里只列举了常用的少数几个操作命令。其实,Numpy可以看作计算科学的基础模块,而接下来介绍的pandas库是在Numpy基础上的拓展,也具备Numpy中的许多功能,而且不要求数据类型必须单一。

    pandas 简介

    import pandas as pd

    Pamdas是建立在 Numpy库之上的,是使得数据分析工作变得更简单更快的高级操作工具。pandas的进行数据处理主要针对两种数据结构:Series 和 DataFrame 。

    Series

    Series 是建立在 pandas 库之上的,是使得数据分析工作变得更简单更快的高级操作工具。引入索引的一大作用是数据对其功能,使得进行数据处理后不会发生数据错行。最简单的 Series 可以由一个列表类型的数据生成:
    >>> import pandas as pd>>> ser1 = pd.Series([1,3,5,7])>>> ser10    11    32    53    7dtype: int64
    Series的数据变现形式:索引在左侧,值在右边,默认的索引是从0开始的整数型序列。我们也可以在创建的时候通过 index 参数指定索引数据。
    >>> ser2 = pd.Series([1,3,5,7], index=['a','b','c','d'])>>> ser2a    1b    3c    5d    7dtype: int64
    在创建 Series 后可以对它们的一些属性进行修改,如下所示:
    >>> ser2.indexIndex(['a', 'b', 'c', 'd'], dtype='object')>>> ser2.index = ['A','B','C','D']>>> ser2A    1B    3C    5D    7dtype: int64
    Series 中特定数据的查找,可以通过以下几种方式来实现:
    >>> ser2['A']  # 通过索引值查找值1>>> ser2[1] # 通过行号查找值3>>> ser2[0:2] # 通过切片来查找子序列A    1B    3dtype: int64
    Series 类型运算中,输出结果会自动对齐不同索引的数据。当序列中没有共同的索引时,则输出缺失值符号 NaN
    >>> ser3 = pd.Series([1,3,5],index=['a','b','c'])>>> ser4 = pd.Series([2,4,6],index=['c','d','b'])>>> ser3 + ser4a    NaNb    9.0c    7.0d    NaNdtype: float64
    上述这种运算机制在数据处理中非常有用,按照索引来进行运算可以避免错误分行。总结:Series 基本操作类似数组和字典,它们之间可以相互转换。但是,序列是顺序指定的、具有索引的数据类型。数组是没有索引的,而字典的元素是无序的。

    Dataframe

    DataFrame是将若干个 Series 按列合并而成的二维数据结构,每一列单独取出来就是一个 Series 。数据框 DataFrame是用于存储多行和多列的数据集合,是机器学习算法读取数据的最常用格式。就像日常见到的二维 Excel 表格一样,第一行默认表示变量名,后续每行为一个样本,而每列表示变量(特征)的取值。利用数据框之前需要导入处理数据的核心库 pandas 。下列几行代码基本包括了 DataFrame 的创建。
    >>> import pandas as pd   # 导入 Python 库 pandas>>> dic1 = {"age":[18,20,22],"name":["xiaoming","wanghan","hanwei"],"Chinese":[90,78,97],"Math":[87,69,89],"English":[98,78,83],"History":[86,79,80],"Physics":[99,78,94]}>>> df = pd.DataFrame(dic1,index=['a','b','c'])>>> print(df)   age      name  Chinese  Math  English  History  Physicsa   18  xiaoming       90    87       98       86       99b   20   wanghan       78    69       78       79       78c   22    hanwei       97    89       83       80       94
    从上面实例可以看出,数据框是由字典 data 直接转化而来。实际数据分析中,采集到的数据结构往往是多种类型的,而数据框恰好可以存放不同类型的数据。另外,利用 Python 读取的数据往往自动转化为数据框类型的,如前面介绍的读取本地数据命令 pd.read_csv() 。

    01

     了解数据全貌

    一旦把数据载入到 Python 中,首先要做的是了解数据的全貌与基本特征。例如,要知道数据框大小(行和列)、列变量名、索引号、数据类型等。如果想知道数据框的列变量与索引名称,可以使用如下命令
    >>> print(df.columns)  # 列变量名称Index(['age', 'name', 'Chinese', 'Math', 'English', 'History', 'Physics'], dtype='object')>>> print(df.index)  # 索引序列Index(['a', 'b', 'c'], dtype='object')>>> print(df.shape) # 行数与列数(3, 7)
    另外,Python 中存在一些内置函数可以输出许多数据框属性,例如:
    >>> df.info()   # 整体汇总<class 'pandas.core.frame.DataFrame'>Index: 3 entries, a to cData columns (total 7 columns):age        3 non-null int64name       3 non-null objectChinese    3 non-null int64Math       3 non-null int64English    3 non-null int64History    3 non-null int64Physics    3 non-null int64dtypes: int64(6), object(1)memory usage: 168.0+ bytes>>> df.describe()  # 对每一列数值型数据进行统计,包括计数、均值、标准差、标准差、各个分位数等        age    Chinese    ...        History    Physicscount   3.0   3.000000    ...       3.000000   3.000000mean   20.0  88.333333    ...      81.666667  90.333333std     2.0   9.609024    ...       3.785939  10.969655min    18.0  78.000000    ...      79.000000  78.00000025%    19.0  84.000000    ...      79.500000  86.00000050%    20.0  90.000000    ...      80.000000  94.00000075%    21.0  93.500000    ...      83.000000  96.500000max    22.0  97.000000    ...      86.000000  99.000000[8 rows x 6 columns]>>> df.describe(include=["object"])  # 基本统计描述(指定变量为类别型)           namecount         3unique        3top     wanghanfreq          1

    02

     访问数据

    访问数据框一列与若干列的常用的方法有如下两种:
    >>> df["name"]  # 按列变量访问a    xiaomingb     wanghanc      hanweiName: name, dtype: object>>> df.iloc[:,3]  # 按照列数访问,这里表示第二列对应的所有行a    87b    69c    89Name: Math, dtype: int64>>> df[["name","age","Math"]]  # 指定列变量名       name  age  Matha  xiaoming   18    87b   wanghan   20    69c    hanwei   22    89>>> df.iloc[:,:3]  # 按照列数访问,这里表示前两列对应所有行   age      name  Chinesea   18  xiaoming       90b   20   wanghan       78c   22    hanwei       97>>> df.head()  # 默认输出前五行   age      name  Chinese  Math  English  History  Physicsa   18  xiaoming       90    87       98       86       99b   20   wanghan       78    69       78       79       78c   22    hanwei       97    89       83       80       94>>> df.tail()  # 默认输出后五行   age      name  Chinese  Math  English  History  Physicsa   18  xiaoming       90    87       98       86       99b   20   wanghan       78    69       78       79       78c   22    hanwei       97    89       83       80       94
    类似的,访问数据框的行有如下几种方法:
    >>> df[1:2]  # 取第二行   age     name  Chinese  Math  English  History  Physicsb   20  wanghan       78    69       78       79       78>>> df.iloc[1,:] # 按照行数访问,这里表示第二行对应的所有列age             20name       wanghanChinese         78Math            69English         78History         79Physics         78Name: b, dtype: object>>> df.iloc[0:2,] # 前两行的所有列   age      name  Chinese  Math  English  History  Physicsa   18  xiaoming       90    87       98       86       99b   20   wanghan       78    69       78       79       78>>> df.iloc[1,1] # 第二行第二列'wanghan'

    03

     数字特征统计

    既然数据框是个数据集合,那么我们经常需要对其进行一些基本统计描述。下面几行代码给出了常用的统计描述的操作:
    >>> print(df.mean()) # 默认对数值型的所有列分布求平均age        20.000000Chinese    88.333333Math       81.666667English    86.333333History    81.666667Physics    90.333333dtype: float64>>> df.sum() # 列求和,方式类似 meanage                           60name       xiaomingwanghanhanweiChinese                      265Math                         245English                      259History                      245Physics                      271dtype: object>>> df.max()  # 求最大值,求最小值用 df.min()age              22name       xiaomingChinese          97Math             89English          98History          86Physics          99dtype: object>>> df.isnull()  # 布尔值输出,检查每列是否有缺失值     age   name  Chinese   Math  English  History  Physicsa  False  False    False  False    False    False    Falseb  False  False    False  False    False    False    Falsec  False  False    False  False    False    False    False>>> df['age'].unique()  # 该列不同值的个数array([18, 20, 22], dtype=int64)>>> df['age'].value_counts()  # 统计某一列 'age' 中各个值出现的次数18    122    120    1Name: age, dtype: int64
    640?wx_fmt=gif
    展开全文
  • Numpy 简介importnumpyasnpNumpy...多维数组是线性代数中非常广泛的概念,如一维数组就是向量,二维数组是矩阵。在数组中,要求所有元素必须是同一类型,这是与列表与字典的区别之一一。针对数组,通过Numpy可以实现...
  • 使用Python列表可以存储一维数组,通过列表的嵌套可以实现多维数组。而numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器,存储效率和输入输出性能远优于Python中的嵌套列表。通常Numpy数组...
  • 矩阵必须是二维的,数组可以是多维的,matrix是array的个分支。 matrix的优势:矩阵乘法较简单,如矩阵A、B相乘:A*B array遵循逐个元素的计算,所以数组c、d:c*d表示c的每个元素与d的对应元素相乘。 可以看出...
  • o 7.15 当我向个接受指针的指针的函数传入二维数组的时候, 编译器报错了。 o 7.16 我怎样编写接受编译时宽度未知的二维数组的函数 ? o 7.17 我怎样在函数参数传递时混用静态和动态多维数组 ? o 7.18 当数组...
  • 文章目录案例说明1、最平凡:数组索引访问2、最伤脑:二次遍历-列表生成器3、最灵巧:活用函数sum()为什么sum()还可以这样玩?...现在需要输出为一维数组,能想到哪些方法呢? # 二维数组 ar1 = [[1, 2, 3], ...
  • 数组和链表的区别

    2020-07-08 19:21:21
    二维数组,多维数组 二.链表: 链表是物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑结构通过链表中的指针连接次序实现。 类型: 1.单向,双向 2.带头,不带头 3.循环,非循环 区别 (联系: 线性表分为顺序...
  • python数据结构及区别

    2017-06-02 17:44:07
    2.列表 list,方括号 [ ],一维,变长,可修改。 3.字典 dict,花括号 { },有键和值 4.集合 set,set([ ]),内容相等则相等,没有顺序之分。 、numpy 1. 多维数组 ndarray,array([ [ ],[ ],[ ] ],[ [ ],...
  • NumPy库学习 一.数据的维度 数据的维度是数据的组织形式。 一维数据:由对等关系的有序或无序数据构成,采用...多维数据:由一维二维数据在新维度上扩展形成 高维数据:仅利用最基本的二元关系展示数据间的...
  • NumPy库学习一.数据的维度数据的维度是数据的组织形式。一维数据:由对等关系的有序...多维数据:由一维二维数据在新维度上扩展形成高维数据:仅利用最基本的二元关系展示数据间的复杂结构。例如json、yaml格式的...
  • 目录 numpy模块 一维数组 二维数组 列表list和numpy的区别 获取多维数组的行和列 多维数组的索引 高级功能 多维数组的合并 通过函数方法创建多维数组 矩阵的运算 求最大值最...
  • 一维数据—列表和集合类型 2.列表与数组 相同点:都是一组数据的有序结构 区别列表的数据类型可不同;而数组的数据类型相同。 3.二维数据----列表 由多个一维数据构成,是一维数据的组合形式。 4.多维数据----...
  • python随手笔记

    2019-07-20 12:55:11
    维度: 1.一维数据: 由对等关系的有序或无序数据构成。采用线性方式组织。 例如: 3.14 , 2.50 ,13.14 , ····· ...列表和数组: 一组数据的...3.多维数据:是由一维二维数据在新维度上扩展形成。 ...
  • 二维数据:由多个一维数据构成,是一维数据组合形式 高维数据:高维数据仅利用最基本的二元关系展示数据间的复杂结构 数据维度的python表示 一维数据:列表和集合类型 [3.1398,3.1349,3.1376] 有序 ...
  • Python的数据类型

    2020-08-08 09:07:37
    这里写自定义目录标题Python的...称为二级列表/二维列表或多级列表/多维列表4.元组类型的定义元组的其他定义方式列表与元组的区别5.Dict字典类型获取字典中的值字典中的键不能重复使用,否则会被后面的值覆盖tips:在py
  • 一维数据(1)特点(2)Python中的表达方式列表、集合类型(3)列表和数组的区别数据类型要求不一样4.二维数据(1)概念,多个一位数据组成,一个以为数据的组合。(2)列表5.多维数据(1)(2)列表6.高维数据(1)仅利用最基本...
  • Python序列中元素的访问方式(一)Python字符串元素的访问、切片与索引 Python序列中元素的访问方式(二)Python列表元素的访问、切片与索引 Python序列中元素的访问...1.一维数组 2.二维数组 3.多维数组 1....
  • Numpy存在的最大意义

    2020-03-15 19:46:13
    大家都知道,直接用python基本语法也是可以实现一维二维多维数组的运算的,但是需要加点循环语句,简单的列表组合和字典就可以代替,那为什么需要Numpy? 仅仅是为了运算更快? 不是的,要让有数据分析相关需求的人...
  • list 与 numpy.ndarray互转

    2020-04-16 14:52:28
    . python中 list 与数组的互相转换 ...python中的二维数组,主要有 list(列表) 和 numpy.ndarray(多维数组) 两种, 两种的区别主要体现在numpy.ndarray 支持更多的索引方式,下面通过代码来看一下两种数据类型...
  • numpy

    2019-02-23 17:32:48
    数组和列表区别: - 数组: 存储的时同种数据类型; - list:容器, 可以存储任意数据类型; numpy 什么numpy? 快速, 方便的科学计算基础库(主要是数值的计算, 多维数组的运算); 轴的理解(axis): 0...
  • 小时内学会 C#(txt版本)

    热门讨论 2009-08-19 18:09:37
    和 C++ 有所区别的是,C# 中没有单独的声明(头)和实现(CPP)文件。所有代码(类声明和实现)都放在扩展名为 cs 的单一文件中。 看看 C# 中的 Hello World 程序。 复制内容到剪贴板 代码: using System; ...
  •  “本书是Summit以及C FAQ在线列表的许多参与者多年心血的结晶,是C语言界最为珍贵的财富之。我向所有C语言程序员推荐本书。”.  ——Francis Glassborow,著名C/C++专家,ACCU(C/C++用户协会)前主席  ...
  •  “本书是Summit以及C FAQ在线列表的许多参与者多年心血的结晶,是C语言界最为珍贵的财富之。我向所有C语言程序员推荐本书。”.  ——Francis Glassborow,著名C/C++专家,ACCU(C/C++用户协会)前主席  ...
  • 6.18 当我向个接受指针的指针的函数传入二维数组的时候,编译器报错了。 6.19 我怎样编写接受编译时宽度未知的二维数组的函数? 6.20 我怎样在函数参数传递时混用静态和动态多维数组? 数组的大小 6.21 当数组...
  • 这导致空间浪费而且无法与外部数据文件进行“进制”读写。能否关掉填充,或者控制结构域的对齐方式? 56 2.14 为什么sizeof返回的值大于结构大小的期望值,是不是尾部有填充? 57 2.15 如何确定域在结构中的字节...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    这导致空间浪费而且无法与外部数据文件进行“进制”读写。能否关掉填充,或者控制结构域的对齐方式? 27  2.14 为什么sizeof返回的值大于结构大小的期望值,是不是尾部有填充? 28 2.15 如何确定域在结构中的...

空空如也

空空如也

1 2 3
收藏数 44
精华内容 17
关键字:

一维列表二维列表多维列表区别