练习一:简单加法
在 Python 下对一个二维列表,l1=[[1,2,3],[4,5,6]],然后进行每个元素+1 的操作。
要求使用
Python 循环
Map 函数
Numpy 计算(广播算法)
方法一;
l1=[[1,2,3],[4,5,6]]
for i in range(len(l1)):
for j in range(len(l1[i])):
l1[i][j]+=1
print(l1)
方法二:
l1=[[1,2,3],[4,5,6]]
def foo(x):
for i in range(len(x)):
x[i] += 1
return x
print list(map(foo,l1))
方法三;
import numpy as np
l1=[[1,2,3],[4,5,6]]
arr = np.array(l1)+1
print arr
输出结果:
练习二:对 arr= [[1, 2, 3], [4, 5, 6], [7,8, 9], [10, 11, 12]]进行行列互转
Python 列表表达式
Numpy 进行转置
arr= [[1, 2, 3], [4, 5, 6], [7,8, 9], [10, 11, 12]]
x= [[row[i] for row in arr] for i in range(len(arr[0]))]
print x
import numpy as np
arr= [[1, 2, 3], [4, 5, 6], [7,8, 9], [10, 11, 12]]
print np.transpose(arr)
输出结果:
这个列表推导式逻辑不太好理解,他是同时执行两个函数
练习三:矩阵内部运算
在 Python 下对一个二维列表,l1=[[1,2,3],[4,5,6]],要求求出按行与按列求和。
在 numpy 下对一个二维列表,l1=[[1,2,3],[4,5,6]],要求求出按行与按列求和。
l1= [[1, 2, 3], [4, 5, 6]]
sum_r=[sum(x) for x in l1]
s = []
total = 0
for column in range(len(l1[0])):
# print("column = ",column)
for i in range(len(l1)):
total += l1[i][column]
s.append(total)
print sum_r,s
输出结果:
对行求和用了列表表达式,逻辑还比较清楚,对列求和比较麻烦,最后终于弄清楚了使用了l1[i][j]的切片,也算是笨办法,有更好的希望一起交流。
还是numpy简单,一个函数就搞定了
import numpy as np
l1= [[1, 2, 3], [4, 5, 6]]
l2=np.array(l1)
print l2.sum(axis=0)
print l2.sum(axis=1)
输出结果:
感觉numpy好好用啊!
练习四:NDArray 创建与属性
使用 Numpy 创建一个多维数组,请输出以下属性
该数组的形状
该数组的维度
该数组元素的个数
该数组的数据类型
import numpy as np
arr = np.arange(12).reshape(3,4)
print arr
print arr.shape
print arr.ndim
print arr.size
print arr.dtype
输出结果:
练习五:NDArray 的访问
创建一个包含从数字 1 到 60,的数组,并将于其形状变为为(3,2,10)的三维数组,并按如下要求访问这个三维数组
import numpy as np
arr = np.arange(1,61).reshape(3,2,10)
print '原始数组',arr
print '-'*50
print arr[:,[1],:]
print '-'*50
print arr[[0],[0],:]
print '-'*50
print arr[:,:,[6,7]]
print '-'*50
arr1=np.reshape(arr,[10,-1])
print arr1
print '-'*50
print np.random.shuffle(arr1)
print '-'*50
print np.sort(arr1,axis=1)
print np.sort(arr1,axis=0)
print np.transpose(arr1)
print np.transpose(arr1).flatten()
输出结果:
注意:
np.random.shuffle(arr1)
print arr1
shuffle函数对数组做处理,所以需要输出后,直接打印才可以