python基础之numpy.reshape详解

python基础之numpy.reshape详解,第1张

这个方法是在不改变数据内容的情况下,改变一个数组的格式,参数及返回值,官网介绍:

a:数组--需要处理的数据

newshape:新的格式--整数或整数数组,如(2,3)表示2行3列,新的形状应该与原来的形状兼容,即行数和列数相乘后等于a中元素的数量

order:

 首先做出翻译: order  : 可选范围为{‘C’, ‘F’, ‘A’}。使用索引顺序读取a的元素,并按照索引顺序将元素放到变换后的的数组中。如果不进行order参数的设置,默认参数为C。

(1)“C”指的是用类C写的读/索引顺序的元素,最后一个维度变化最快,第一个维度变化最慢。以二维数组为例,简单来讲就是横着读,横着写,优先读/写一行。

(2)“F”是指用FORTRAN类索引顺序读/写元素,最后一个维度变化最慢,第一个维度变化最快。竖着读,竖着写,优先读/写一列。注意,“C”和“F”选项不考虑底层数组的内存布局,只引用索引的顺序。

(3)“A”选项所生成的数组的效果与原数组a的数据存储方式有关,如果数据是按照FORTRAN存储的话,它的生成效果与”F“相同,否则与“C”相同。这里可能听起来有点模糊,下面会给出示例。

二、示例解释

1、首先随机生成一个4行3列的数组

2、使用reshape,这里有两种使用方法,可以使用npreshape(r,(-1,1),order='F'),也可以使用r1=rreshape((-1,1),order='F'),这里我选择使用第二种方法。通过示例可以观察不同的order参数效果。

通过例子可以看出来,F是优先对列信息进行 *** 作,而C是优先行信息 *** 作。如果未对r的格式进行设置,那么我们rashape的时候以“A”的顺序进行order的话,它的效果和“C”相同。

3、我们将r的存储方式进行修改,修改为类Fortan的方式进行存储。并做与第2步类似的 *** 作。

基础 *** 作样例:

1引入numpy,名称为np 

2接下来创建一个数组a,可以看到这是一个一维的数组 

3使用reshape()方法来更改数组的形状,可以看到看数组d成为了一个二维数组

4通过reshape生成的新数组和原始数组公用一个内存,也就是说,假如更改一个数组的元素,另一个数组也将发生改变 

5同理还可以得到一个三维数组 

reshape(-1,1)什么意思:

大意是说,数组新的shape属性应该要与原来的配套,如果等于-1的话,那么Numpy会根据剩下的维度计算出数组的另外一个shape属性值。

举例:

同理,只给定行数,newshape等于-1,Numpy也可以自动计算出新数组的列数。

#coding=utf-8

'''

Created on 2014-3-21

@author: Neo

'''

def PrintList(array):#输出数组

    for i in range(array__len__()):

        print array[i]

def SetList(array):#给数组赋值

    row = 11

    col = 11

    for i in range(array__len__()):

        for j in range(array[i]__len__()):

            array[i][j] = row

            row += 10

        col += 1

        row = col

        

    print "赋值后的二维数组:"

    PrintList(array) 

    

    return array   

        

def InitList(x, y):

    #初始化一个二维数组

    array = [([0]  y) for i in range(x)]

  

    return array

    

def GetListByCoord(array, radius, x, y):

    #根据半径来确定数组的行数和列数

    row_col = 2  radius + 1

    #初始化结果数组

    result = InitList(row_col, row_col)

    #获取传入的array的行数和列数

    arrayRow, arrayCol = len(array), len(array[0])

    #坐标x、y的值即为结果数组的中心,依此为偏移

    for i in range(result__len__()):

        for j in range(result__len__()):

            if (i+x-radius < 0 or j+y-radius < 0 or 

            i+x-radius >= arrayRow or j+y-radius >= arrayCol):

                result[i][j] = 0

            else:

                result[i][j] = array[i+x-radius][j+y-radius]

    

    #打印结果

    print "结果为:"

    PrintList(result)

if __name__ == '__main__':

    #数组7列6行

    array = SetList(InitList(6,7))

    GetListByCoord(array, 1, 3, 3)

    GetListByCoord(array, 2, 3, 3)

    GetListByCoord(array, 2, 0, 0)

    GetListByCoord(array, 2, 0, 6)

    GetListByCoord(array, 2, 5, 0)

    GetListByCoord(array, 2, 5, 6)

运行结果为:

---------------------------------------------------------------------------------------------

赋值后的二维数组:

[11, 21, 31, 41, 51, 61, 71]

[12, 22, 32, 42, 52, 62, 72]

[13, 23, 33, 43, 53, 63, 73]

[14, 24, 34, 44, 54, 64, 74]

[15, 25, 35, 45, 55, 65, 75]

[16, 26, 36, 46, 56, 66, 76]

结果为:

[33, 43, 53]

[34, 44, 54]

[35, 45, 55]

结果为:

[22, 32, 42, 52, 62]

[23, 33, 43, 53, 63]

[24, 34, 44, 54, 64]

[25, 35, 45, 55, 65]

[26, 36, 46, 56, 66]

结果为:

[0, 0, 0, 0, 0]

[0, 0, 0, 0, 0]

[0, 0, 11, 21, 31]

[0, 0, 12, 22, 32]

[0, 0, 13, 23, 33]

结果为:

[0, 0, 0, 0, 0]

[0, 0, 0, 0, 0]

[51, 61, 71, 0, 0]

[52, 62, 72, 0, 0]

[53, 63, 73, 0, 0]

结果为:

[0, 0, 14, 24, 34]

[0, 0, 15, 25, 35]

[0, 0, 16, 26, 36]

[0, 0, 0, 0, 0]

[0, 0, 0, 0, 0]

结果为:

[54, 64, 74, 0, 0]

[55, 65, 75, 0, 0]

[56, 66, 76, 0, 0]

[0, 0, 0, 0, 0]

[0, 0, 0, 0, 0]

"""

思路:

STEP 1: 将每个子列表的第二数用列表保存起来 --> values

STEP 2: 将对应的数和其在原数组的相对应的位置下标用一个字典保存起来 -->value_position

STEP 3: 将valuse进行排序

STEP 4: 再根据排序后的顺序去value_position 找对应的位置

STEP 5: 根据原位置拿到原来的数,再按顺序将他们放进一个新的列表

STEP 6: 转化成字符串并进行相对应的处理

"""

def mySort(args):

value_position = {}

values = []

position = 0

for e in args:

valuesappend(e[1])

value_position[e[1]] = position

position+=1

valuessort()

#d = [ value_positionget(key) for key in values]

result = [ ''join(str(args[p]))for p in [ value_positionget(key) for key in values]]

return ''join(result)replace('[',' ',)replace(']',',')replace(',',' ') #比较丑,应该有更简单的方法

a = [[1,2],[3,1],[4,0]]

print 'previous list :%s: '%a

print 'post list: %s: '%mySort(a)

以上就是关于python基础之numpy.reshape详解全部的内容,包括:python基础之numpy.reshape详解、python 查找二维数组的相邻元素、关于python数组中的数组的处理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9483247.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存