
正文
python循环创建多为数组,python将数组循环写入数组
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Python怎么生成三维数
1、创建一般的多维数组
import numpy as np
a = np.array([1,2,3], dtype=int) # 创建1*3维数组 array([1,2,3])
type(a) # numpy.ndarray类型
a.shape # 维数信息(3L,)
a.dtype.name # 'int32'
a.size # 元素个数:3
a.itemsize #每个元素所占用的字节数目:4
b=np.array([[1,2,3],[4,5,6]],dtype=int) # 创建2*3维数组 array([[1,2,3],[4,5,6]])
b.shape # 维数信息(2L,3L)
b.size # 元素个数:6
b.itemsize # 每个元素所占用的字节数目:4
c=np.array([[1,2,3],[4,5,6]],dtype='int16') # 创建2*3维数组 array([[1,2,3],[4,5,6]],dtype=int16)
c.shape # 维数信息(2L,3L)
c.size # 元素个数:6
c.itemsize # 每个元素所占用的字节数目:2
c.ndim # 维数
d=np.array([[1,2,3],[4,5,6]],dtype=complex) # 复数二维数组
d.itemsize # 每个元素所占用的字节数目:16
d.dtype.name # 元素类型:'complex128'
2、创建一般的多维数组
import numpy as np
a = np.array([1,2,3], dtype=int) # 创建1*3维数组 array([1,2,3])
type(a) # numpy.ndarray类型
a.shape # 维数信息(3L,)
a.dtype.name # 'int32'
a.size # 元素个数:3
a.itemsize #每个元素所占用的字节数目:4
b=np.array([[1,2,3],[4,5,6]],dtype=int) # 创建2*3维数组 array([[1,2,3],[4,5,6]])
b.shape # 维数信息(2L,3L)
b.size # 元素个数:6
b.itemsize # 每个元素所占用的字节数目:4
c=np.array([[1,2,3],[4,5,6]],dtype='int16') # 创建2*3维数组 array([[1,2,3],[4,5,6]],dtype=int16)
c.shape # 维数信息(2L,3L)
c.size # 元素个数:6
c.itemsize # 每个元素所占用的字节数目:2
c.ndim # 维数
d=np.array([[1,2,3],[4,5,6]],dtype=complex) # 复数二维数组
d.itemsize # 每个元素所占用的字节数目:16
d.dtype.name # 元素类型:'complex128'
3、创建特殊类型的多维数组
a1 = np.zeros((3,4)) # 创建3*4全零二维数组
输出:
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
a1.dtype.name # 元素类型:'float64'
a1.size # 元素个数:12
a1.itemsize # 每个元素所占用的字节个数:8
a2 = np.ones((2,3,4), dtype=np.int16) # 创建2*3*4全1三维数组
a2 = np.ones((2,3,4), dtype='int16') # 创建2*3*4全1三维数组
输出:
array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]]], dtype=int16)
a3 = np.empty((2,3)) # 创建2*3的未初始化二维数组
输出:(may vary)
array([[ 1., 2., 3.],
[ 4., 5., 6.]])
a4 = np.arange(10,30,5) # 初始值10,结束值:30(不包含),步长:5
输出:array([10, 15, 20, 25])
a5 = np.arange(0,2,0.3) # 初始值0,结束值:2(不包含),步长:0.2
输出:array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])
from numpy import pi
np.linspace(0, 2, 9) # 初始值0,结束值:2(包含),元素个数:9
输出:
array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
x = np.linspace(0, 2*pi, 9)
输出:
array([ 0. , 0.78539816, 1.57079633, 2.35619449, 3.14159265,
3.92699082, 4.71238898, 5.49778714, 6.28318531])
a = np.arange(6)
输出:
array([0, 1, 2, 3, 4, 5])
b = np.arange(12).reshape(4,3)
输出:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
c = np.arange(24).reshape(2,3,4)
输出:
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]]])
使用numpy.set_printoptions可以设置numpy变量的打印格式
在ipython环境下,使用help(numpy.set_printoptions)查询使用帮助和示例
4、多维数组的基本操作
加法和减法操作要求操作双方的维数信息一致,均为M*N为数组方可正确执行操作。
a = np.arange(4)
输出:
array([0, 1, 2, 3])
b = a**2
输出:
array([0, 1, 4, 9])
c = 10*np.sin(a)
输出:
array([ 0. , 8.41470985, 9.09297427, 1.41120008])
n 35
输出:
array([ True, True, True, True], dtype=bool)
A = np.array([[1,1],[0,1]])
B = np.array([[2,0],[3,4]])
C = A * B # 元素点乘
输出:
array([[2, 0],
[0, 4]])
D = A.dot(B) # 矩阵乘法
输出:
array([[5, 4],
[3, 4]])
E = np.dot(A,B) # 矩阵乘法
输出:
array([[5, 4],
[3, 4]])
多维数组操作过程中的类型转换
When operating with arrays of different types, the type of the
resulting array corresponds to the more general or precise one (a
behavior known as upcasting)
即操作不同类型的多维数组时,结果自动转换为精度更高类型的数组,即upcasting
数组索引、切片和迭代
a = np.ones((2,3),dtype=int) # int32
b = np.random.random((2,3)) # float64
b += a # 正确
a += b # 错误
a = np.ones(3,dtype=np.int32)
b = np.linspace(0,pi,3)
c = a + b
d = np.exp(c*1j)
输出:
array([ 0.54030231+0.84147098j, -0.84147098+0.54030231j,
-0.54030231-0.84147098j])
d.dtype.name
输出:
'complex128'
多维数组的一元操作,如求和、求最小值、最大值等
a = np.random.random((2,3))
a.sum()
a.min()
a.max()
b = np.arange(12).reshape(3,4)
输出:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
b.sum(axis=0) # 按列求和
输出:
array([12, 15, 18, 21])
b.sum(axis=1) # 按行求和
输出:
array([ 6, 22, 38])
b.cumsum(axis=0) # 按列进行元素累加
输出:
array([[ 0, 1, 2, 3],
[ 4, 6, 8, 10],
[12, 15, 18, 21]])
b.cumsum(axis=1) # 按行进行元素累加
输出:
array([[ 0, 1, 3, 6],
[ 4, 9, 15, 22],
[ 8, 17, 27, 38]])
universal functions
B = np.arange(3)
np.exp(B)
np.sqrt(B)
C = np.array([2.,-1.,4.])
np.add(B,C)
其他的ufunc函数包括:
all, any, apply_along_axis, argmax, argmin, argsort, average, bincount, ceil, clip, conj, corrcoef, cov, cross, cumprod, cumsum, diff, dot, floor,inner, lexsort, max, maximum, mean, median, min, minimum, nonzero, outer, prod, re, round, sort, std, sum, trace, transpose, var,vdot, vectorize, where
5. 数组索引、切片和迭代
a = np.arange(10)**3
a[2]
a[2:5]
a[::-1] # 逆序输出
for i in a:
print (i**(1/3.))
def f(x,y):
return 10*x+y
b = np.fromfunction(f,(5,4),dtype=int)
b[2,3]
b[0:5,1]
b[:,1]
b[1:3,:]
b[-1]
c = np.array([[[0,1,2],[10,11,12]],[[100,101,102],[110,111,112]]])
输出:
array([[[ 0, 1, 2],
[ 10, 11, 12]],
[[100, 101, 102],
[110, 111, 112]]])
c.shape
输出:
(2L, 2L, 3L)
c[0,...]
c[0,:,:]
输出:
array([[ 0, 1, 2],
[10, 11, 12]])
c[:,:,2]
c[...,2]
输出:
array([[ 2, 12],
[102, 112]])
for row in c:
print(row)
for element in c.flat:
print(element)
a = np.floor(10*np.random.random((3,4)))
输出:
array([[ 3., 9., 8., 4.],
[ 2., 1., 4., 6.],
[ 0., 6., 0., 2.]])
a.ravel()
输出:
array([ 3., 9., 8., ..., 6., 0., 2.])
a.reshape(6,2)
输出:
array([[ 3., 9.],
[ 8., 4.],
[ 2., 1.],
[ 4., 6.],
[ 0., 6.],
[ 0., 2.]])
a.T
输出:
array([[ 3., 2., 0.],
[ 9., 1., 6.],
[ 8., 4., 0.],
[ 4., 6., 2.]])
a.T.shape
输出:
(4L, 3L)
a.resize((2,6))
输出:
array([[ 3., 9., 8., 4., 2., 1.],
[ 4., 6., 0., 6., 0., 2.]])
a.shape
输出:
(2L, 6L)
a.reshape(3,-1)
输出:
array([[ 3., 9., 8., 4.],
[ 2., 1., 4., 6.],
[ 0., 6., 0., 2.]])
详查以下函数:
ndarray.shape, reshape, resize, ravel
6. 组合不同的多维数组
a = np.floor(10*np.random.random((2,2)))
输出:
array([[ 5., 2.],
[ 6., 2.]])
b = np.floor(10*np.random.random((2,2)))
输出:
array([[ 0., 2.],
[ 4., 1.]])
np.vstack((a,b))
输出:
array([[ 5., 2.],
[ 6., 2.],
[ 0., 2.],
[ 4., 1.]])
np.hstack((a,b))
输出:
array([[ 5., 2., 0., 2.],
[ 6., 2., 4., 1.]])
from numpy import newaxis
np.column_stack((a,b))
输出:
array([[ 5., 2., 0., 2.],
[ 6., 2., 4., 1.]])
a = np.array([4.,2.])
b = np.array([2.,8.])
a[:,newaxis]
输出:
array([[ 4.],
[ 2.]])
b[:,newaxis]
输出:
array([[ 2.],
[ 8.]])
np.column_stack((a[:,newaxis],b[:,newaxis]))
输出:
array([[ 4., 2.],
[ 2., 8.]])
np.vstack((a[:,newaxis],b[:,newaxis]))
输出:
array([[ 4.],
[ 2.],
[ 2.],
[ 8.]])
np.r_[1:4,0,4]
输出:
array([1, 2, 3, 0, 4])
np.c_[np.array([[1,2,3]]),0,0,0,np.array([[4,5,6]])]
输出:
array([[1, 2, 3, 0, 0, 0, 4, 5, 6]])
详细使用请查询以下函数:
hstack, vstack, column_stack, concatenate, c_, r_
7. 将较大的多维数组分割成较小的多维数组
a = np.floor(10*np.random.random((2,12)))
输出:
array([[ 9., 7., 9., ..., 3., 2., 4.],
[ 5., 3., 3., ..., 9., 7., 7.]])
np.hsplit(a,3)
输出:
[array([[ 9., 7., 9., 6.],
[ 5., 3., 3., 1.]]), array([[ 7., 2., 1., 6.],
[ 7., 5., 0., 2.]]), array([[ 9., 3., 2., 4.],
[ 3., 9., 7., 7.]])]
np.hsplit(a,(3,4))
输出:
[array([[ 9., 7., 9.],
[ 5., 3., 3.]]), array([[ 6.],
[ 1.]]), array([[ 7., 2., 1., ..., 3., 2., 4.],
[ 7., 5., 0., ..., 9., 7., 7.]])]
实现类似功能的函数包括:
hsplit,vsplit,array_split
8. 多维数组的复制操作
a = np.arange(12)
输出:
array([ 0, 1, 2, ..., 9, 10, 11])
not copy at all
b = a
b is a # True
b.shape = 3,4
a.shape # (3L,4L)
def f(x) # Python passes mutable objects as references, so function calls make no copy.
print(id(x)) # id是python对象的唯一标识符
id(a) # 111833936L
id(b) # 111833936L
f(a) # 111833936L
浅复制
c = a.view()
c is a # False
c.base is a # True
c.flags.owndata # False
c.shape = 2,6
a.shape # (3L,4L)
c[0,4] = 1234
print(a)
输出:
array([[ 0, 1, 2, 3],
[1234, 5, 6, 7],
[ 8, 9, 10, 11]])
s = a[:,1:3]
s[:] = 10
print(a)
输出:
array([[ 0, 10, 10, 3],
[1234, 10, 10, 7],
[ 8, 10, 10, 11]])
深复制
d = a.copy()
d is a # False
d.base is a # False
d[0,0] = 9999
print(a)
输出:
array([[ 0, 10, 10, 3],
[1234, 10, 10, 7],
[ 8, 10, 10, 11]])
numpy基本函数和方法一览
Array Creation
arange, array, copy, empty, empty_like, eye, fromfile, fromfunction, identity, linspace, logspace, mgrid, ogrid, ones, ones_like, r, zeros,zeros_like
Conversions
ndarray.astype, atleast_1d, atleast_2d, atleast_3d, mat
Manipulations
array_split, column_stack, concatenate, diagonal, dsplit, dstack, hsplit, hstack, ndarray.item, newaxis, ravel, repeat, reshape, resize,squeeze, swapaxes, take, transpose, vsplit, vstack
Questionsall, any, nonzero, where
Ordering
argmax, argmin, argsort, max, min, ptp, searchsorted, sort
Operations
choose, compress, cumprod, cumsum, inner, ndarray.fill, imag, prod, put, putmask, real, sum
Basic Statistics
cov, mean, std, var
Basic Linear Algebra
cross, dot, outer, linalg.svd, vdot
完整的函数和方法一览表链接:
相关问答
Q1: python怎么操作多维数组元素
在Python中,一个像这样的多维表格可以通过“序列的序列”实现。一个表格是行的序列。每一行又是独立单元格的序列。这类似于我们使用的数学记号,在数学里我们用Ai,j,而在Python里我们使用A[i][j],代表矩阵的第i行第j列。
这看起来非常像“元组的列表”(Lists of Tuples)。
“列表的列表”示例
我们可以使用嵌套的列表推导式(list comprehension)创建一个表格。 下面的例子创建了一个“序列的序列”构成的表格,并为表格的每一个单元格赋值。
table= [ [ 0 for i in range(6) ] for j in range(6) ]
print table
for d1 in range(6):
for d2 in range(6):
table[d1][d2]= d1+d2+2
print table
123456
程序的输出结果如下:
[[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]
[[2, 3, 4, 5, 6, 7], [3, 4, 5, 6, 7, 8], [4, 5, 6, 7, 8, 9],
[5, 6, 7, 8, 9, 10], [6, 7, 8, 9, 10, 11], [7, 8, 9, 10, 11, 12]]
1234
这个程序做了两件事:创建了一个6 × 6的全0表格。 然后使用两枚骰子的可能组合的数值填充表格。 这并非完成此功能最有效的方式,但我们通过这个简单的例子来演示几项技术。我们仔细看一下程序的前后两部分。
程序的第一部分创建并输出了一个包含6个元素的列表,我们称之为“表格”;表格中的每一个元素都是一个包含6个0元素的列表。它使用列表推导式,对
于范围从0到6的每一个j都创建对象。每一个对象都是一个0元素列表,由i变量从0到6遍历产生。初始化完成之后,打印输出二维全0表格。
推导式可以从里向外阅读,就像一个普通表达式一样。内层列表[ 0 for i in range(6) ]创建了一个包含6个0的简单列表。外层列表[ [...] for j in range(6) ]创建了这些内层列表的6个深拷贝。
程序的第2个部分对2个骰子的每一个组合进行迭代,填充表格的每一个单元格。这由两层嵌套循环实现,每一个循环迭代一个骰子。外层循环枚举第一个骰子的所有可能值d1。内层循环枚举第二个骰子d2。
更新每一个单元格时需要通过table[d1]选择每一行;这是一个包含6个值的列表。这个列表中选定的单元格通过...[d2]进行选择。我们将掷骰子的值赋给这个单元格,d1+d2+2
其他示例
打印出的列表的列表不太容易阅读。下面的循环会以一种更加可读的形式显示表格。
for row in table:
...
print row
...
[2, 3, 4, 5, 6, 7]
[3, 4, 5, 6, 7, 8]
[4, 5, 6, 7, 8, 9]
[5, 6, 7, 8, 9, 10]
[6, 7, 8, 9, 10, 11]
[7, 8, 9, 10, 11, 12]
12345678910111213
作为练习,读者可以试着在打印列表内容时,再打印出行和列的表头。提示一下,使用"%2d" % value字符串运算符可以打印出固定长度的数字格式。
显示索引值(Explicit Index Values)
我们接下来对骰子表格进行汇总统计,得出累计频率表。我们使用一个包含13个元素的列表(下标从0到12)表示每一个骰子值的出现频率。观察可知骰子值2在矩阵中只出现了一次,因此我们期望fq[2]的值为1。遍历矩阵中的每一个单元格,得出累计频率表。
fq= 13 * [0]
for i in range(6):
for j in range(6):
c= table[i][j]
fq[ c ] += 1
12345
使用下标i选出表格中的行,用下标j从行中选出一列,得到单元格c。然后用fq统计频率。
这看起来非常的数学和规范。Python提供了另外一种更简单一些的方式。
使用列表迭代器而非下标
表格是列表的列表,可以采用无下标的for循环遍历列表元素。
fq= 13 * [0]
print fq
for row in table:
for c in row:
fq[c] += 1
print fq[2:]
Q2: python里怎么定义三维数组
在Windows下运行应用程序时出现非法操作的提示
此类故障引起原因较多,在如下几钟可能:
(1) 系统文件被更改或损坏,倘若由此引发则打开一些系统自带的程序时就会出现非法操作,(例如,打开控制面板)
(2) 驱动程序未正确安装,此类故障一般表现在显卡驱动程序之止,倘若由此引发,则打开一些游戏程序时就会产生非法操作,有时打开一此网页也会出现这种程况。
(3) 内存质量不好,降低内存速度也可能会解决这个问题。
(4) 软件不兼容,如,IE 5。5在Windows 98 SE 上,当打开多个网页也会产生非法操作。
Q3: Python——ndarray多维数组基本操作(1)
数组允许进行批量操作而无需使用for循环,因此更加简便,这种特性也被称为向量化。任何两个等尺寸之间的算术操作都应用逐元素操作的方式进行。
同尺度数组之间的比较,会产生一个布尔型数组。
上述操作均是在同尺度数组之间进行的,对于不同尺度数组间的操作,会使用到广播特性。
索引:获取数组中特定位置元素的过程;
切片:获取数组元素子集的过程。
new_a = a.astype(new_type)
astype()方法一定会创建新的数组(原始数据的一个拷贝),即使两个类型一致。
ls = a.tolist()
转置是一种特殊的数据重组形式,可以返回底层数据的视图而不需要复制任何内容。
数组拥有 transpose 方法,也有特殊的 T 属性。
对于更高纬度的数组, transpose 方法可以接受包含轴编号的元组,用于转置轴。
ndarray的 swapaxes 方法,通过接受一对轴编号作为参数,并对轴进行调整用于重组数据。
swapaxes 方法返回的是数据的视图,而没有对数据进行复制。
Reference:
《Python for Data Analysis:Data Wrangling with Pandas,Numpy,and IPython》
Q4: python中怎么表示多维数组
只有通过遍历得到。这个应该没有直接获取的方式方法。遍历这个数组,当然维数不确定的话你就需要使用递归,然后一一判断它的值是否为你指定的值,然后输出索引。另外,建议不要匿名提问,因为这会让很多高手不屑于回答你的问题。
Q5: 创建数组,系列,数据框分别需要导入什么模块
创建数组需要导入NumPy模块,创建系列需要导入pandas模块,创建数据框需要导入pandas模块。NumPy是Python中科学计算的基础包,提供了高性能的多维数组对象以及相关工具。NumPy的核心是ndarray(N-dimensional array)对象,它是一个由同类型数据元素组成的多维数组。因此,我们需要导入NumPy模块来创建数组。pandas是Python中最流行的数据处理库之一,它提供了Series和DataFrame两种数据结构。Series是一种一维数组,它可以存储任何数据类型。DataFrame是一个二维表格数据结构,它可以存储多种数据类型。因此,我们需要导入pandas模块来创建Series和DataFrame。
python循环创建多为数组的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python将数组循环写入数组、python循环创建多为数组的信息别忘了在本站进行查找喔。







