numpy.r_与numpy.c_理解

numpy.r_和numpy.c_都是用来对多个片段进行连接,组成一个数组
Translates slice objects to concatenation 

两者连接的方式稍有差异,r_表示将片段沿着第一维度方向进行级联;c_表示将片段沿着第二维度方向进行级联。

比如

例1:

两个列表 list1 = [1, 2, 3]   list2 = [4, 5, 6],各自维度元组均为(3,)(3列),元组第一维度为列。因此,默认不带控制字符串情况下,r_按列方向级联,c_按行方向级联

list1 = [1, 2, 3]
list2 = [4, 5, 6]
x = np.r_[list1, list2]
y = np.c_[list1, list2]
print 'r_  x'
print x
print 'c_  y'
print y

结果如下:

r_  x
[1 2 3 4 5 6]  ->
c_  y
[[1 4]  |
 [2 5]  v
 [3 6]]

例2:

list1 = [[1], [2], [3]]   list2 = [[4], [5], [6]],维度元组分别为(3,1), (3,1),第一个维度对应行,所以r_按行方向级联,c_按列方向级联。

list1 = [[1], [2], [3]]
list2 = [[4], [5], [6]]
x1 = np.r_[list1, list2]
y1 = np.c_[list1, list2]
print x1
print y1

结果如下:

r_  x
[[1]
 [2]
 [3]
 [4]
 [5]
 [6]]

c_  y
[[1 4]
 [2 5]
 [3 6]]

例3:

list1 = [[13, 14], [15, 16]],list2 = [[17, 18], [19, 20]],维度元组分别为(2,2), (2,2),第一个维度对应行,所以r_按行方向级联,c_按列方向级联。

list1 = [[13, 14], [15, 16]]
list2 = [[17, 18], [19, 20]]
x = np.r_[list1, list2]
y = np.c_[list1, list2]
print x

结果如下:

r_  x

[[13 14]
 [15 16]
 [17 18]
 [19 20]]

c_  y

[[13 14 17 18]
 [15 16 19 20]]

另外,还支持控制字符串方式,控制字符串可以为逗号分割的两个整数或者三个整数,形如'a, b, c'

其中,

a表示级联方向,等同于前面的r_,c_,0相当于r_,1相当于c_

b表示合并后数组的最少维数

c表示为了满足最低维数,片段进行维度扩展的方式,具体描述就是原片段数据表示哪个维度的第一个元素(在此情况维度是固定,第一维表示行,第二维表示列)。比如[1, 2, 3],如果c=0,则表示第一维度(行),列表中的元素分别代表每行的第一个元素,即2维扩展后变成3行1列数组;c=1,则表示第二维度(列),列表中的元素分别代表每列的第一个元素,即2维扩展后变成1行3列数组。

list1 = [[1], [2], [3]]
list2 = [[4], [5], [6]]
j = np.r_['0, 2, 0', list1, list2]    # 当作每行第一个元素,行方向级联
k = np.r_['1, 2, 0', list1, list2]    # 当作每行第一个元素,列方向级联
print 'r_  0'
print j
print 'r_  1'
print k

# 结果
r_  0
[[1]
 [2]
 [3]
 [4]
 [5]
 [6]]
r_  1
[[1 4]
 [2 5]
 [3 6]]
list3 = [7, 8, 9]
list4 = [10, 11, 12]
j = np.r_['0, 2, 0', list3, list4]    # 当作每行第一个元素,行方向级联
k = np.r_['1, 2, 0', list3, list4]    # 当作每行第一个元素,列方向级联
print 'r_  0'
print j
print 'r_  1'
print k

# 结果
r_  0
[[ 7]
 [ 8]
 [ 9]
 [10]
 [11]
 [12]]
r_  1
[[ 7 10]
 [ 8 11]
 [ 9 12]]
list3 = [7, 8, 9]
list4 = [10, 11, 12]
j = np.r_['0, 2, 0', list3, list4] # 当作每行第一个元素,行方向级联
k = np.r_['0, 2, 1', list3, list4] # 当作每列第一个元素,行方向级联
print 'r_  0'
print j
print 'r_  1'
print k

# 结果
r_  0
[[ 7]
 [ 8]
 [ 9]
 [10]
 [11]
 [12]]
r_  1
[[ 7  8  9]
 [10 11 12]]
刚接触python,有很多理解不到位,欢迎指正,谢谢

你可能感兴趣的:(机器视觉)