1. 二维数组不连续行提取
搭配使用 np.where 和 np.take,比如在a中取标签列为 ‘aa’ 和 ‘bb’ 的样本数据
>>> a = np.array([[1,1,1],[2,2,2],[3,3,3],[4,4,4]],dtype=object) >>> b = ['aa','bb','cc','aa'] >>> c = np.column_stack((a,b)) ## 在特征列后增加标签列 >>> c array([[1, 1, 1, 'aa'], [2, 2, 2, 'bb'], [3, 3, 3, 'cc'], [4, 4, 4, 'aa']], dtype=object) >>> t = c[:,-1] >>> t array(['aa', 'bb', 'cc', 'aa'], dtype=object) >>> result = a.take(np.where((t=='aa') | (t=='bb'))[0],0) #注意np.where的返回,这里返回的是一个tuple,需要用[0]取索引数组 >>> result array([[1, 1, 1], [2, 2, 2], [4, 4, 4]], dtype=object)
2. 数据训练时的标签列需要用numpy的array结构,而不能是list
ValueError:
validation_split
is only supported for Tensors or NumPy arrays, found following types in the input
3. 对多个array画折线图,同一个array一种颜色,图例按颜色给标签
import matplotlib.pyplot as plt ... # 这里train_x_*都是二维数组 line1 = plt.plot(train_x_1.T, c = 'r', label = 'S2R_CL') line3 = plt.plot(train_x_3.T, c = 'g', label = 'S2RNCR_CL') line4 = plt.plot(train_x_4.T, c = 'b', label = 'S2RCR_CL') plt.legend(handles=[line1[0],line3[0], line4[0]], loc=1) plt.show()
显示效果如下
4. 对list在一行中写完if else
>>> aa = [0,2,0,0,2,2,0,2,0,0,0,2] # 将aa中的2全部替换为1 >>> bb = [1 if i==2 else i for i in aa] >>> bb [0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1] >>> cc = [0,3,5,3,3,5,5,3,5,3] # 再复杂点,把列表中的3替换成1,5替换成2,其他不变 >>> dd = [i-2 if i==3 else i-3 if i==5 else i for i in cc] >>> dd [0, 1, 2, 1, 1, 2, 2, 1, 2, 1] >>> e = list(map(lambda x:x-2 if x==3 else x-3 if x==5 else x,cc)) #同样的效果用list和map实现 >>> e [0, 1, 2, 1, 1, 2, 2, 1, 2, 1]
5. 二维数组每一列减去同一列
>>> a = np.array([[1,2,5],[2,5,7],[3,6,9],[4,6,8]],dtype=object) >>> a array([[1, 2, 5], [2, 5, 7], [3, 6, 9], [4, 6, 8]], dtype=object) >>> b = (a.T - a[:,0].T).T #对a的每一列减去第一列 >>> b array([[0, 1, 4], [0, 3, 5], [0, 3, 6], [0, 2, 4]], dtype=object)
6. TypeError: the JSON object must be str, bytes or bytearray, not ‘list’
在使用python的jason库时,偶然碰到以下问题
TypeError: the JSON object must be str, bytes or bytearray, not ‘list’
通过如下代码可复现问题
>>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> import json >>> ra = json.loads(a) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "D:\Python36\lib\json\__init__.py", line 348, in loads 'not {!r}'.format(s.__class__.__name__)) TypeError: the JSON object must be str, bytes or bytearray, not 'list'
分析可知,python中的列表如果要通过json库解析为jason对象,就会出现以上提示。意思是,jason的对象必须是字符串,字节或字节数组,不能是列表。如果将 a 通过 str(a),在调用 loads,则不会出现以上问题。
>>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> str(a) '[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]' >>> json.loads(str(a)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]