#要用到numpy.c_,查看官网说明,最后到了numpy.r_,没看懂,百度用法,屎里淘金,结果还没淘到,研究了一下,记个笔记记一下。(软件用的Jupyter)#
numpy.c_就是numpy.r_的一种参数下的用法,一种numpy.r_的特例。
numpy.r_()的参数分两部分,一个是一个字符串,内容是由逗号分隔的整数,例如,'-1,2,0',每个整数表示不同的设置。第二部分就是需要级联的数组了,可以多个,但需要注意维度。
第一句话是关键,翻译过来是“由三个逗号分隔的整数组成的字符串允许指定连接的坐标轴、强制元素进入的最小维数,以及哪个坐标轴应该包含小于指定维数的数组的起始位置。”后面英语水平可以的自己看,不行的也可以不看。
1.第一个整数
表示在哪个轴级联。在我看来这个轴就是维度。用.shape后得到各个维度的长度。
x_1 = np.random.randint(0, high=10, size=[2,3,4], dtype='l')
x_2 = np.random.randint(0, high=10, size=[2,3,4], dtype='l')
print('x_1.shape=',x_1.shape)
print('x_2.shape=',x_2.shape)
print('np.r_["0",x_1, x_2].shape=',np.r_['0',x_1, x_2].shape)
print('np.r_["1",x_1, x_2].shape=',np.r_['1',x_1, x_2].shape)
print('np.r_["2",x_1, x_2].shape=',np.r_['2',x_1, x_2].shape)
print('np.r_["-1",x_1, x_2].shape=',np.r_['-1',x_1, x_2].shape)
np.r_['0',x_1, x_2]
np.r_['1',x_1, x_2]
np.r_['2',x_1, x_2]
np.r_['-1',x_1, x_2]
运行结果如上,就是将整数对应的维度的长度相加,具体结果自己试试,除了将要级联的维度,其它维度的长度需要保证相等,前面的整数也不能超过最大维度,比如这个写3会报错。
2.第二个整数
表示级联后结果的最小维度,比如设置为2,那么结果最小就是二维的,即使本身结果是一维的也会变成二维的。高于二维的则不受影响。
x_1 = np.random.randint(0, high=10, size=[2,3], dtype='l')
x_2 = np.random.randint(0, high=10, size=[2,3], dtype='l')
x_1
x_2
np.r_['1,1',x_1, x_2].shape
np.r_['1,1',x_1, x_2]
np.r_['1,2',x_1, x_2].shape
np.r_['1,2',x_1, x_2]
np.r_['1,3',x_1, x_2].shape
np.r_['1,3',x_1, x_2]
np.r_['1,4',x_1, x_2].shape
np.r_['1,4',x_1, x_2]
需要级联的数组本身就是二维的,所以第二个整数是1和2的时候不影响结果,当为3和4时对结果造成影响。
具体过程:如果第二个数的维度大于将要级联的数组的维度,那么就会对该数组进行处理,当为3时,将各维度长度为(2,3)的数组转换成各维度长度为(1,2,3),eg:(3,4)→(1,3,4)。当为4时,(3,4)→(1,1,3,4),就是这样进行处理,然后再按照第一个整数所指向的维度进行级联。
3.第三个整数
用于修改在第二个整数转换各维度长度后,原先的维度在新维度的位置。下面数组维度为2长度为(2,3),级联后维度为3。
x_1 = np.random.randint(0, high=10, size=[2,3], dtype='l')
x_2 = np.random.randint(0, high=10, size=[2,3], dtype='l')
x_1
x_2
np.r_['0,4',x_1, x_2].shape
np.r_['1,4',x_1, x_2].shape
np.r_['3,4',x_1, x_2].shape
np.r_['2,4,-1',x_1, x_2].shape
np.r_['0,4,0',x_1, x_2].shape
np.r_['1,4,0',x_1, x_2].shape
np.r_['2,4,0',x_1, x_2].shape
np.r_['3,4,0',x_1, x_2].shape
np.r_['0,4,1',x_1, x_2].shape
np.r_['1,4,1',x_1, x_2].shape
np.r_['2,4,1',x_1, x_2].shape
np.r_['3,4,1',x_1, x_2].shape
np.r_['0,4,2',x_1, x_2].shape
np.r_['1,4,2',x_1, x_2].shape
np.r_['2,4,2',x_1, x_2].shape
np.r_['3,4,2',x_1, x_2].shape
#np.r_['0,4,3',x_1, x_2].shape
第三个整数默认是“-1”,数组维度转换和上面介绍第二个整数时相同。二挡第三个整数为‘0’时,数组维度转换结果由原先的(1,1,2,3)变为(2,3,1,1),整数为‘1’时结果为(1,2,3,1);整数为‘2’时结果为(1,1,2,3)和‘-1’时相同,而为‘3’就会报错,因为2+3>4了,第一个整数还是之和在哪个维度级联相关。
4.总结
numpy.r_的这三个整数默认值是'0,1,-1'
numpy.c_就是numpy.r_在三个整数是'-1,2,0'时的特例,因为常用,所以单独拎出来了。