import numpy
nfl = numpy.genfromtxt("nfl.csv", delimiter=",")
得到numpy.ndarray类型
但这样的读法有个问题,numpy会试图将strings转为floats,转不过来会变成nan。为了让读出的数据是string格式,加上参数dtype="U75"。
import numpy as np
import numpy
world_alcohol = numpy.genfromtxt("world_alcohol.csv",dtype="U75",skip_header=1,delimiter=",")
print(world_alcohol)
axis=0/1如何选择如下:
- 1 means that we want to perform the operation on each row
- 0 means on each column.
matrix = numpy.array([
[5, 10, 15],
[20, 25, 30],
[35, 40, 45]
])
matrix.sum(axis=1)
得到:[30, 75, 120]
总结:
1、numpy是什么?
- numpy库核心是提供了一种多维数组对象叫ndarray。
- 矩阵matrix是numpy的特例,一个二维数组。
- arr=np.array(data),得到ndarray型arr
2、numpy最大的劣势是什么?
- 数组中每个元素必须是相同的数据格式,都是string/float...
- 行和列必须用数字引用,没有行头/列头的概念
3、numpy使用功能有哪些?
- 轻松转化元素的格式:如arr=arr.astype(float64)
- 不用编写循环,批量执行数组对应元素的操作,如arr*arr,arr-arr
- 各种索引和切片,当然任何修改会直接反映到源数据
A. 数字切片
第一个是行,第二个是列,如arr[1,:2]
B. 布尔型索引
如is_year=(arr[:,0]=='1990');arr[is_year,:]得到1990年对应的行
matrix = np.array([[5, 10, 15],
[20, 25, 30],
[35, 40, 45]])
second_column_25 = (matrix[:,1] == 25)
print(second_column_25,matrix[second_column_25,:])
C. 花式索引:利用整数数组进行索引
arr=np.arange(32).reshape((8,4))
arr
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 25, 26, 27],
[28, 29, 30, 31]])
arr[[1,5,7,2],[0,3,1,2]]
array([ 4, 23, 29, 10])
arr[[1,5,7,2]]
array([[ 4, 5, 6, 7],
[20, 21, 22, 23],
[28, 29, 30, 31],
[ 8, 9, 10, 11]])
arr[[1,5,7,2]][:,[0,3,1,2]]
array([[ 4, 7, 5, 6],
[20, 23, 21, 22],
[28, 31, 29, 30],
[ 8, 11, 9, 10]])
arr[np.ix_([1,5,7,2],[0,3,1,2])]
array([[ 4, 7, 5, 6],
[20, 23, 21, 22],
[28, 31, 29, 30],
[ 8, 11, 9, 10]])
- numpy提供了各类函数,如abs,sqrt,dot,transpose,where,unique,cumsum,cumprod
arr=np.arange(3)
print(arr)
np.where(arr>0,2,-2)
[0 1 2]
array([-2, 2, 2])