numpy常用操作

np.newaxis增加array维度

a[:, np.newaxis] # 给a最外层中括号中的每一个元素加[]
a[np.newaxis, :] # 给a最外层中括号中所有元素加[]
对一维数组有:

x = np.random.randint(1, 8, size=5)
Out[1]: array([4, 6, 6, 6, 5])
x1 = x[np.newaxis, :]
Out[2]: array([[4, 6, 6, 6, 5]])
x2 = x[:, np.newaxis]
Out[3]: 
array([[4],
       [6],
       [6],
       [6],
       [5]])

若不使用numpy也可以concat = concat[None], 但只能用于一维数组:
参考 https://www.jb51.net/article/144967.htm

numpy.concatenate() 数组拼接

方法1: 使用list的extend()
首先将数组转成列表,然后利用列表的拼接函数append()、extend()等进行拼接处理,最后将列表转成数组。该方法只适用于简单的一维数组拼接,由于转换过程很耗时间,对于大量数据的拼接一般不建议使用。
方法二: 使用numpy.append()
numpy直接提供了numpy.append(arr, values, axis=None)函数。对于参数规定,要么一个数组和一个数值;要么两个数组,不能三个及以上数组直接append拼接。
注意: numpy的数组没有动态改变大小的功能,numpy.append()函数每次都会重新分配整个数组,并把原来的数组复制到新数组中。
方法三: 使用numpy.concatenate()
numpy提供了numpy.concatenate((a1,a2,...), axis=0)函数。能够一次完成多个数组的拼接。其中a1,a2,...是数组类型的参数。concatenate()效率比append()高,适合大规模的数据拼接。

np.concatenate((a,b),axis=1)  #axis=1表示对应行的数组进行拼接

默认情况下,axis=0可以不写。对于一维数组拼接,axis的值不影响最后的结果。

参考 https://blog.csdn.net/qq_38150441/article/details/80488800

numpy.random.RandomState()

可以通过numpy工具包生成模拟数据集,使用RandomState获得随机数生成器

from numpy.random import RandomState
rdm = RandomState(1)

注意:这里1为随机数种子,只要随机数种子seed相同,产生的随机数系列就相同
均匀分布:

a = rdm.uniform(1,2,(3,4))
print(a)

输出结果为:

[[1.417022   1.72032449 1.00011437 1.30233257]
 [1.14675589 1.09233859 1.18626021 1.34556073]
 [1.39676747 1.53881673 1.41919451 1.6852195 ]]

产生一个3行4列的数组,其中每个元素都是在[1,2]区间内均匀分布的随机数
[0, 1)之间的随机分布:

b = rdm.rand(1,2)
print(b)

输出为:

[[0.417022   0.72032449]]

注意:这里的rand()里面的值若为0,就表示会随机产生一个[0,1)之间的随机数,并不是一个一维数组,且0可以包括,1不包含。当rand()里面数为1时,产生一个一维的一个数字数组。rand(2)返回一个一维的2个数字数组.

  • np.random.rand(): 同rdm.rand(), rand()返回一个数字, rand(1)返回一个一维的1个数字数组, rand(2)返回一个一维的2个数字数组, 要注意区分.
  • np.random.randn(): 同上, 只是服从正态分布
  • numpy.random.randint(low, high=None, size=None, dtype=’l’): 通过low来指定起点,通过high来指定终点,通过size参数来指定数组的维度,通过dtype来确定类型。范围包括low不包括high, 当high未指定时范围为[0, low), 默认数据类型为np.int.
  • np.random.random(size=None): 生成[0, 1)之间的浮点数,

np.hstack(), np.vstack()

np.hstack()按水平方向堆叠成一个新的数组, 即把所有行放入到一个数组中, 由(150,2)变成(300,), np.vstack()按竖直方向. 该操作目的本质上就是把list变成ndarray, 因为list无list[:, 0]这种切片操作. 且list[0]返回的是一维列表, list[0:1]返回的是二维列表, 虽然内容相同

data = np.hstack(data).reshape(-1, 2) # reshape中-1可以自动根据其他的参数计算出-1处需要的参数
label = np.hstack(label).reshape(-1, 1)

np.meshgrid()

也叫np.mgrid(), 当传入两个一维数组时, np.meshgrid(x, y)先以x为每一行, 共len(y)行组成二维数组; 再以y的转置为每一列, 共len(x)列组成二维数组, 最后返回两个形状相同的二维数组组成的列表.
注: numpy中一维数组均为列向量, 实质上是x的转置成为每一行, 只不过这里为了方便观察反过来了

若两个参数均为多维数组, 则np.meshgrid()返回的第一个数组为len(y)行, 每一行相当于做了一个x.ravel()或np.hstack(x); 第二个数组为len(x)列, 每一列相当于y.ravel()的转置.
其中x.ravel()将所有元素汇总成同一行, 相当于np.hstack(x)

x = np.array([[0, 1, 2, 3], [4, 5, 6, 7]])
y = np.array([[11, 12, 13], [14, 15, 16]])
np.meshgrid(x, y)
OUT: 
[array([[0, 1, 2, 3, 4, 5, 6, 7],
        [0, 1, 2, 3, 4, 5, 6, 7],
        [0, 1, 2, 3, 4, 5, 6, 7],
        [0, 1, 2, 3, 4, 5, 6, 7],
        [0, 1, 2, 3, 4, 5, 6, 7],
        [0, 1, 2, 3, 4, 5, 6, 7]]), array([[11, 11, 11, 11, 11, 11, 11, 11],
        [12, 12, 12, 12, 12, 12, 12, 12],
        [13, 13, 13, 13, 13, 13, 13, 13],
        [14, 14, 14, 14, 14, 14, 14, 14],
        [15, 15, 15, 15, 15, 15, 15, 15],
        [16, 16, 16, 16, 16, 16, 16, 16]])]

np.c_[], np.r_[]

np.c_[], np.r_[]必须使用方括号传入数组
  • np.r_[]是按列连接两个矩阵,就是把两矩阵上下相加,要求列数相等。相当于np.concatenate([xx, yy], axis=0)或者np.row_stack([xx, yy])
    当输入为一维数组时视为2个列向量纵向拼接
  • np.c_[]是按行连接两个矩阵,就是把两矩阵左右相加,要求行数相等。相当于np.concatenate([xx, yy], axis=1)或者np.column_stack([xx, yy])
    当输入为一维数组时视为2个列向量横向拼接

在numpy中,一个一维数组虽然是横着表示的,但它是列向量。

np.repeat()和np.tile()

主要用于对齐Proposal和RoI以逐一进行比较, tf中没有repeat()函数, 使用tf.tile()和tf.reshape()达到同样效果

boxes1 = [[0,0,3,3], [1,1,5,5], [9,9,11,11]]
boxes2 = [[0,0,2,2], [1,1,3,3], [4,4,6,6], [6,6,9,9], [11,11,13,13]]
b1 = np.repeat(boxes1, np.shape(boxes2)[0], axis=0)
b2 = np.tile(boxes2, [np.shape(boxes1)[0], 1])
with tf.Session() as sess:
    print(sess.run(b1, b2))

输出为
[[ 0  0  3  3]
 [ 0  0  3  3]
 [ 0  0  3  3]
 [ 0  0  3  3]
 [ 0  0  3  3]
 [ 1  1  5  5]
 [ 1  1  5  5]
 [ 1  1  5  5]
 [ 1  1  5  5]
 [ 1  1  5  5]
 [ 9  9 11 11]
 [ 9  9 11 11]
 [ 9  9 11 11]
 [ 9  9 11 11]
 [ 9  9 11 11]] 
[[ 0  0  2  2]
 [ 1  1  3  3]
 [ 4  4  6  6]
 [ 6  6  9  9]
 [11 11 13 13]
 [ 0  0  2  2]
 [ 1  1  3  3]
 [ 4  4  6  6]
 [ 6  6  9  9]
 [11 11 13 13]
 [ 0  0  2  2]
 [ 1  1  3  3]
 [ 4  4  6  6]
 [ 6  6  9  9]
 [11 11 13 13]]

np.argmax()

axis=0返回每一列最大值的位置, axis=1返回每一行最大值的位置

test = np.array([[1, 2, 3], [2, 3, 4], [5, 4, 3], [8, 7, 2]])
np.argmax(test, 0)   #输出:array([3, 3, 1]), 即[8, 7, 4]的位置
np.argmax(test, 1)   #输出:array([2, 2, 0, 0]), 即[3, 4, 5, 8]的位置
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343