它似乎是某种横向连接,但我在网上找不到任何文档。这是一个最小的工作示例:
In [1]: from numpy import c_
In [2]: a = ones(4)
In [3]: b = zeros((4,10))
In [4]: c_[a,b]
Out[4]:
array([[ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
答案 0 :(得分:38)
使用IPython的?
语法获取更多信息:
In [2]: c_?
Type: CClass
Base Class: <class 'numpy.lib.index_tricks.CClass'>
String Form:<numpy.lib.index_tricks.CClass object at 0x9a848cc>
Namespace: Interactive
Length: 0
File: /usr/lib/python2.7/dist-packages/numpy/lib/index_tricks.py
Docstring:
Translates slice objects to concatenation along the second axis.
This is short-hand for ``np.r_['-1,2,0', index expression]``, which is
useful because of its common occurrence. In particular, arrays will be
stacked along their last axis after being upgraded to at least 2-D with
1's post-pended to the shape (column vectors made out of 1-D arrays).
For detailed documentation, see `r_`.
Examples
--------
>>> np.c_[np.array([[1,2,3]]), 0, 0, np.array([[4,5,6]])]
array([[1, 2, 3, 0, 0, 4, 5, 6]])
答案 1 :(得分:14)
我花了很多时间来理解,但看来我终于明白了。
您要做的就是沿第二个轴添加。
让我们来:
np.c_[np.array([1,2,3]), np.array([4,5,6])]
但是没有第二轴。所以我们在心里加了一个。
两个数组的形状都变为(3,1)
。
因此,结果形状将为(3,1 + 1),即(3,2)。 结果的形状-
array([[1, 4],
[2, 5],
[3, 6]])
另一个例子:
np.c_[np.array([[1,2,3]]), 0, 0, np.array([[4,5,6]])]
形状:
np.array([[1,2,3]])
= 1,3
np.array([[4,5,6]])
= 1,3
0
,所以我们可以将其视为[[0]]
= 1,1
所以结果1,3+1+1+3
= 1,8
这是结果的形式:array([[1, 2, 3, 0, 0, 4, 5, 6]])
答案 2 :(得分:4)
实际上它不是一个函数,它是类CClass的一个对象。
it is "not a function, so takes no parameters
以上是官方文件所说的内容。您可以查看此问题以获取详细信息。
答案 3 :(得分:2)
我将解释如下。它会将您的第一个数组连接到函数中最后一个数组的最后一个维度(轴)。
例如:
# both are 2 dimensional array
a = array([[1, 2, 3], [4, 5, 6]])
b = array([[7, 8, 9], [10, 11, 12]])
现在,让我们看一下np.c_(a, b)
:
首先,让我们看一下形状:
a和b的形状均为(2, 3)
。将a(2,3)连接到b(3)的最后一个轴,同时保持其他轴不变(1)将变为
(2, 3 + 3) = (2, 6)
那是新形状。
现在,让我们看一下结果:
在b中,最后一个轴上的2个项目是:
1st: [7, 8, 9]
2nd: [10, 11, 12]
为其添加a表示:
1st item: [1,2,3] + [7,8,9] = [1,2,3,7,8,9]
2nd item: [4,5,6] + [10,11,12] = [4,5,6,10,11,12]
所以,结果是
[
[1,2,3,7,8,9],
[4,5,6,10,11,12]
]
它的形状是(2,6)
答案 4 :(得分:2)
使用 numpy 连接数组的一种简短技术是 np.c_ 和 np.r_
np.c_[] 沿第二个轴连接数组 但是, np.r_[] 沿第一个轴连接数组
假设:
import numpy as np
a = np.array([[1,2,3],
[11,22,33]]
)
b = np.array([[4,5,6],
[44,55,66]]
)
a 的形状:(2,3) 即(行数,列数)也 =(第一轴,第二轴)
b 的形状:(2,3) 即(第一轴,第二轴)
np.r_ 沿第一个轴连接 所以 np.r_[a,b] 给出:
array([[ 1, 2, 3],
[11, 22, 33],
[ 4, 5, 6],
[44, 55, 66]])
即沿行(第一轴)串联,所以这里的行数会增加。
虽然 np.c_[a,b] 沿第二个轴连接,即此处的列如下:
array([[ 1, 2, 3, 4, 5, 6],
[11, 22, 33, 44, 55, 66]])
答案 5 :(得分:1)
例如:
我有 2 个带值的数组:
a = [x1,x2,x3]
b = [y1,y2,y3]
我们想将它们合并在一起,我们有这样的东西:[[x1, y2],[x2, y2],[x3, y3]]
。
因此我们使用 numpy.c_[a, b]
import numpy
a = [1,2,3]
b = [4,5,6]
value = numpy.c_[a,b]
print(value)
# [
# [1, 4],
# [2, 5],
# [3, 6]
# ]
答案 6 :(得分:0)
它将几个1D数组转换为2D数组,原始数组的一维保留为2D数组的一维。多个输入数组用作第二维。
这样想:如果您将30个记录的数据系列收集到单独的1D数组中,np.c_
就像在excel表中那样组合这些系列:并排在30个单独的列中,而不是扩展第一个系列。
例如,两个起始数组:
>>> arrayX = np.array([X1,X2...,X30])
array([X1, X2..., X30])
>>> arrayY = np.array([Y1,Y2...,Y30])
array([Y1, Y2..., Y30])
让我们看看np.c_
是如何将它们结合起来的:
>>>arrayC = np.c_(arrayX, arrayY)
array([[X1, Y1],
[X2, Y2],
...
[X30, Y30]])
看看还有30条记录吗?现在,您可以使用第二维在数据系列之间导航。
documentation有点含糊地说:“将切片对象沿第二个轴转换为串联”。 第二轴是什么?表示的结果是2D数组。尚不清楚是否不知道这是np.r_
的变体,它是沿第一个轴连接的。并且如果您不认为一维数组是具有另一个维度。但是从语法上讲,它确实可以。
查询数组的形状以说明这一点:
>>> np.shape(arrayX)
(30,)
>>> np.shape(arrayY)
(30,)
>>> np.shape(arrayC)
(30,2)
您可以看到通过np.c_
方法创建的第二维或轴,并在此处进行连接。相比之下:
>>> arrayR = np.r_[array1,array2]
array([X1, X2..., X30, Y1, Y2..., Y30])
>>> np.shape(arrayR)
(60,)
np.r_
方法在第一维内或沿第一轴连接。
答案 7 :(得分:-1)
np.c _ [[1,4,5,4,5,3],[1,4,2,4,5,3],[2,4,6,8,9,0]]。 。这会以水平轴或0轴表示阵列。因此阵列将是
array([[1, 1, 2],
[4, 4, 4],
[5, 2, 6],
[4, 4, 8],
[5, 5, 9],
[3, 3, 0]])
要确定行, 元素总数/阵列总数
(即18/3) [{len([1,4,5,4,5,3])} + {len([1,4,5,4,5,3])} + {len([2,4,6,8 ,9,0])}] // len([[1,4,5,4,5,3],[1,4,2,4,5,3],[2,4,6,8, 9,0]])
那么Aboove One Gives 6..SO将有6行。
对于No Colums, 元素总数/ len(数组中的任何一个数组)
例如18 / len([1,4,5,4,5,3])
所以列数将为18/6,即3。