在数据处理的时候经常会根据条件来添加行或者列,所以记录一下。
- np.c_:添加列
- np.r_: 添加行
具体用法看下面的代码就比较清楚了。
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.array([[11,12,13],[14,15,16],[17,18,19]])
print("*********(a)**************")
print(a)
print("*********(b)**************")
print(b)
print("*********c_(a,b)**************")
np_c_ab = np.c_[a,b]
print(np_c_ab)
print("**********r_(a,b)***********")
np_r_ab = np.r_[a,b]
print(np_r_ab)
结果如下
*********(a)**************
[[1 2 3]
[4 5 6]
[7 8 9]]
*********(b)**************
[[11 12 13]
[14 15 16]
[17 18 19]]
*********c_(a,b)**************
[[ 1 2 3 11 12 13]
[ 4 5 6 14 15 16]
[ 7 8 9 17 18 19]]
**********r_(a,b)***********
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[11 12 13]
[14 15 16]
[17 18 19]]
如果要根据矩阵中数值的条件进行判断生成要添加的行或者列,可以参考下面的代码(以添加列为例)
print("a>5的索引")
print(np.where(a>5))
#新建一列narray
col_num = a.shape[1]
y_add = np.zeros((col_num,1),dtype=int)
print("第三列中数值>4的索引")
print(np.where(a[:,2]>4))
print("更改之前y_add \n",y_add)
y_add[np.where(a[:,2]>4),0]=1
print("更改之后y_add \n ",y_add)
print("a.shape: ",a.shape," ","y_add.shape: ",y_add.shape)
y = np.c_[a,y_add]
print("**********c_(a,y_add)***********")
print(y)
结果如下
a>5的索引
(array([1, 2, 2, 2]), array([2, 0, 1, 2]))
第三列中数值>4的索引
(array([1, 2]),)
更改之前y_add
[[0]
[0]
[0]]
更改之后y_add
[[0]
[1]
[1]]
a.shape: (3, 3) y_add.shape: (3, 1)
**********c_(a,y_add)***********
[[1 2 3 0]
[4 5 6 1]
[7 8 9 1]]
这样就可以基本解决数值转换的问题了。