它似乎是某种横向连接,但我在网上找不到任何文档.这是一个最小的工作示例:
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.]])
Run Code Online (Sandbox Code Playgroud)
Tho*_*s K 39
使用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]])
Run Code Online (Sandbox Code Playgroud)
kri*_*hna 20
我花了很多时间来理解,但似乎我终于明白了.
您所要做的就是沿第二轴添加.
让我们来 :
np.c_[np.array([1,2,3]), np.array([4,5,6])]
Run Code Online (Sandbox Code Playgroud)
但没有第二轴.所以我们在精神上添加一个.
所以两个阵列的形状都变成了(3,1).
因此得到的形状将是(3,1 + 1),即(3,2).这是结果的形状 -
np.array([[1,2,3]])
另一个例子:
array([[1, 4],
[2, 5],
[3, 6]])
Run Code Online (Sandbox Code Playgroud)
形状:
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]])
这是结果的形状: (3,1)
小智 14
使用 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]]
)
Run Code Online (Sandbox Code Playgroud)
a的形状:(2,3)即(行数,列数)也=(第1轴,第2轴)
b 的形状:(2,3) 即(第 1 轴,第 2 轴)
np.r_ 沿第一个轴连接,因此 np.r_[a,b] 给出:
array([[ 1, 2, 3],
[11, 22, 33],
[ 4, 5, 6],
[44, 55, 66]])
Run Code Online (Sandbox Code Playgroud)
即沿行(第一轴)串联,因此此处的行数会增加。
虽然 np.c_[a,b] 沿第二轴连接,即此处的列如下:
array([[ 1, 2, 3, 4, 5, 6],
[11, 22, 33, 44, 55, 66]])
Run Code Online (Sandbox Code Playgroud)
Jas*_*ing 12
我将解释如下。它将您的第一个数组连接到函数中最后一个数组的最后一个维度(轴)。
例如:
# both are 2 dimensional array
a = array([[1, 2, 3], [4, 5, 6]])
b = array([[7, 8, 9], [10, 11, 12]])
Run Code Online (Sandbox Code Playgroud)
现在,让我们来看看np.c_(a, b):
首先,让我们看一下形状:
a 和 b 的形状都是(2, 3)。将 a (2, 3) 连接到 b (3) 的最后一个轴,同时保持其他轴不变 (1) 将变为
(2, 3 + 3) = (2, 6)
Run Code Online (Sandbox Code Playgroud)
那是新的形状。
现在,让我们看看结果:
在 b 中,最后一个轴中的 2 个项目是:
1st: [7, 8, 9]
2nd: [10, 11, 12]
Run Code Online (Sandbox Code Playgroud)
添加一个到它意味着:
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]
Run Code Online (Sandbox Code Playgroud)
所以,结果是
[
[1,2,3,7,8,9],
[4,5,6,10,11,12]
]
Run Code Online (Sandbox Code Playgroud)
它的形状是 (2, 6)
它将几个一维数组转换为一个二维数组,保留原始数组的一维作为二维数组的第一维。多个输入数组用作第二维。
可以这样想:如果您将每条 30 条记录的数据系列收集到单独的一维数组中,np.c_请像在 excel 表中一样组合这些系列:并排在 30 列的单独列中,而不是扩展第一个系列。
例如,2个起始数组:
>>> arrayX = np.array([X1,X2...,X30])
array([X1, X2..., X30])
>>> arrayY = np.array([Y1,Y2...,Y30])
array([Y1, Y2..., Y30])
Run Code Online (Sandbox Code Playgroud)
让我们看看如何np.c_组合它们:
>>>arrayC = np.c_(arrayX, arrayY)
array([[X1, Y1],
[X2, Y2],
...
[X30, Y30]])
Run Code Online (Sandbox Code Playgroud)
看到它仍然有 30 条记录吗?您现在可以使用第二维在数据系列之间导航。
该文档有些神秘地指出:“将切片对象转换为沿第二个轴的连接。” 第二轴什么?由此产生的二维数组,他们的意思。不清楚您是否不知道这是 的变体np.r_,它沿第一个轴连接;并且如果您不认为一维数组具有另一个维度。但从句法上来说,确实如此。
查询数组的形状来说明这一点:
>>> np.shape(arrayX)
(30,)
>>> np.shape(arrayY)
(30,)
>>> np.shape(arrayC)
(30,2)
Run Code Online (Sandbox Code Playgroud)
您可以看到该np.c_方法创建了第二维或轴,并在那里进行了连接。相比之下:
>>> arrayR = np.r_[array1,array2]
array([X1, X2..., X30, Y1, Y2..., Y30])
>>> np.shape(arrayR)
(60,)
Run Code Online (Sandbox Code Playgroud)
该np.r_方法在第一个维度内或沿第一个轴连接。
| 归档时间: |
|
| 查看次数: |
41043 次 |
| 最近记录: |