-
2020-11-27 23:51:08
如果python使用numpy创建多维数组会比较简单
但是不用numpy呢?
二维数组的创建:
3行10列的二维数组的创建:
m = [[0]*3 for _ in range(10)]
或者
m = [[0]*3]*10
我们来检查一下数组创建的对不对
for i in range(10):
for j in range(3):
try:
if (m[i][j] != 0): print(i,j)
except:
print(i,j,"error")
没有输出error有关的东西,正确!
三维数组的创建:
4行3列,Z=2的三维数组的创建:
m = [[[0] * 2 for _ in range(3) ] for _ in range(4)]
或者
m = [[[0]*2]*3]*4
检查:
for i in range(4):
for j in range(3):
for k in range(2):
try:
if (m[i][j][k] != 0): print(i, j,k);
except:
print(i,j,k ,"error")
没有输出error有关的东西,正确!
接下来多维数组的创建也就很简单了
m = [.....[[0]*q]*w]*e]*r]*t]*y]*u]*.........]
更多相关内容 -
Python操作多维数组输出和矩阵运算示例
2020-12-25 20:26:33本文实例讲述了Python操作多维数组输出和矩阵运算。分享给大家供大家参考,具体如下: 在许多编程语言中(Java,COBOL,BASIC),多维数组或者矩阵是(限定各维度的大小)预先定义好的。而在Python中,其实现更简单... -
python中多维数组的比较
2021-01-28 20:58:40x in enumerate(new)] for old, new in zip(old_arr, new_arr)] print(new_arr) 哪些输出: ^{pr2}$ 更新: 下面是一个处理相邻单元的暴力解决方案:old_arr = [[8,8,8,8,0,0,0,0,6,6,5,5], [8,8,8,8,0,0,0,0,6,6,5...假设old_arr和new_arr长度相同,可以这样做:old_arr = [[8,8,8,8,0,0,0,0,6,6,5,5], [8,8,7,0,0,0,0,0,6,6,5,5]]
new_arr = [[9,9,6,7,3,6,5,0,6,4,3,4], [9,0,6,7,4,6,5,0,6,4,3,4]]
new_arr = [[x if old[i] else 0 for i, x in enumerate(new)] for old, new in zip(old_arr, new_arr)]
print(new_arr)
哪些输出:
^{pr2}$
更新:
下面是一个处理相邻单元的暴力解决方案:old_arr = [[8,8,8,8,0,0,0,0,6,6,5,5],
[8,8,8,8,0,0,0,0,6,6,5,5],
[8,8,8,8,0,0,0,0,6,6,5,5],
[8,8,8,8,0,0,0,0,6,6,5,5]]
new_arr = [[9,9,6,7,3,6,5,0,6,4,3,4],
[9,9,6,7,3,6,5,0,6,4,3,4],
[9,9,6,7,3,6,5,0,6,4,3,4],
[9,9,6,7,3,6,5,0,6,4,3,4]]
def first_last(row, next_row, old, new):
for i in range(len(new[row])):
count = 0
if old[row][i] == 0:
if old[row][i-1] == 0:
count += 1
if old[row][i+1] == 0:
count += 1
if old[next_row][i] == 0:
count += 1
if old[next_row][i-1] == 0:
count += 1
if old[next_row][i+1] == 0:
count += 1
if count > 4:
new[row][i] = 0
def middle(old, new):
for i, l in enumerate(new[1:-1]):
for j in range(len(l)):
count = 0
if old[i][j] == 0:
if old[i][j-1] == 0:
count += 1
if old[i][j+1] == 0:
count += 1
if old[i-1][j] == 0:
count += 1
if old[i-1][j-1] == 0:
count += 1
if old[i-1][j+1] == 0:
count += 1
if old[i+1][j] == 0:
count += 1
if old[i+1][j-1] == 0:
count += 1
if old[i+1][j+1] == 0:
count += 1
if count > 4:
l[j] = 0
# first row
first_last(0, 1, old_arr, new_arr)
# middle rows
middle(old_arr, new_arr)
# last row
first_last(-1, -2, old_arr, new_arr)
print(new_arr)
哪些输出:[[9, 9, 6, 7, 3, 0, 0, 0, 6, 4, 3, 4],
[9, 9, 6, 7, 0, 0, 0, 0, 6, 4, 3, 4],
[9, 9, 6, 7, 0, 0, 0, 0, 6, 4, 3, 4],
[9, 9, 6, 7, 3, 0, 0, 0, 6, 4, 3, 4]]
注意:这可以做得更好,但您可以根据自己的喜好对其进行优化。在
-
计算python中多维数组中数组的出现次数
2020-12-05 05:03:22可以将这些行转换为1D数组,使用元素作为二维索引,并使用^{}。然后,使用^{}给我们每个唯一行的开始位置,并且还有一个可选参数return_counts来给我们计数。因此,实现将如下所示-def unique_rows_counts(a):# ...可以将这些行转换为1D数组,使用元素作为二维索引,并使用^{}。然后,使用^{}给我们每个唯一行的开始位置,并且还有一个可选参数return_counts来给我们计数。因此,实现将如下所示-def unique_rows_counts(a):
# Calculate linear indices using rows from a
lidx = np.ravel_multi_index(a.T,a.max(0)+1 )
# Get the unique indices and their counts
_, unq_idx, counts = np.unique(lidx, return_index = True, return_counts=True)
# return the unique groups from a and their respective counts
return a[unq_idx], counts
样本运行-
^{pr2}$
标杆管理
假设您可以将numpy数组或集合作为输出,那么可以对迄今为止提供的解决方案进行基准测试,如下-
功能定义:import numpy as np
from collections import Counter
def unique_rows_counts(a):
lidx = np.ravel_multi_index(a.T,a.max(0)+1 )
_, unq_idx, counts = np.unique(lidx, return_index = True, return_counts=True)
return a[unq_idx], counts
def map_Counter(a):
return Counter(map(tuple, a))
def forloop_Counter(a):
c = Counter()
for x in a:
c[tuple(x)] += 1
return c
时间安排:In [53]: a = np.random.randint(0,4,(10000,5))
In [54]: %timeit map_Counter(a)
10 loops, best of 3: 31.7 ms per loop
In [55]: %timeit forloop_Counter(a)
10 loops, best of 3: 45.4 ms per loop
In [56]: %timeit unique_rows_counts(a)
1000 loops, best of 3: 1.72 ms per loop
-
python之多维数组(一)
2020-12-01 00:37:17Numpy中定义的最终对象是称为ndarray的N维数组类型。它描述相同类型的元素集合。可以使用基于零的索引访问集合中的项目。ndarray创建方式array()函数接收一个普通的python序列,并将其转换为ndarray。numpy.array...Numpy中定义的最终对象是称为ndarray的N维数组类型。它描述相同类型的元素集合。可以使用基于零的索引访问集合中的项目。
ndarray创建方式
array()函数
接收一个普通的python序列,并将其转换为ndarray。
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
序号
参数
描述
1
object
任何暴露数组接口方法的对象都会返回一个数组或任何(嵌套)序列。
2
dtype
数组的所需数据类型,可选。
3
copy
可选,默认为true,对象是否被复制。
4
order
C(按行)、F(按列)或A(任意,默认)。
5
subok
默认情况下,返回的数组被强制为基类数组。如果为true,则返回子类。
6
ndimin
指定返回数组的最小维数。import numpy as np
# 例子01
a = np.array([1,2,3])
print(a)
print(type(a))
# 多于一个维度
a2 = np.array([[1,2],[3,4]])
print(a2)
# 最小维度
a3 = np.array([1,2,3,4,5],ndmin = 2)
print(a3)
empty()函数
创建指定形状和dtype的未初始化数组
numpy.empty(shape, dtype = float, order = 'C')
序号
参数
描述
1
Shape
空数组的形状,整数或整数元组
2
Dtype
所需的输出数组类型,可选
3
Order
'C’为按行的 C 风格数组,'F’为按列的 Fortran 风格数组import numpy as np
#例: 数组元素为随机值
arr = np.empty((3,3),dtype = 'i1')
print(arr)
zeros()函数
创建指定长度或者形状的全零数组。
# 例
arr = np.zeros((3,3))
print(arr)
# 自定义类型
arr = np.zeros((3,3), dtype = [('x', 'i4'), ('y', 'i4')])
print(arr)
ones()函数
创建指定长度或者形状的全1数组。
arr = np.ones((2,3,4))
print(arr)
# 自定义类型
arr = np.ones((3,3), dtype = [('x', 'i4'), ('y', 'i4')])
print(arr)
asarray()函数
类似 numpy.array 可以将Python序列转换为ndarray。
# 来自列表
arr = [1,2,3,4]
arr2 = np.asarray(arr)
print(arr2)
print(type(arr))
print(type(arr2))
# 来自元组
arr = (1,2,3,4)
arr2 = np.asarray(arr)
print(arr2)
print(type(arr))
print(type(arr2))
# 来自元组列表
arr = [(1,2,3,4),(5,6,7,8)]
arr2 = np.asarray(arr)
print(arr2)
print(type(arr))
print(type(arr2))
arange()函数
类似python的range函数,通过指定开始值、终值和步长来创建一个一维数组,注意:最终创建的数组不包含终值。
numpy.arange(start,stop,step,dtype)
arr = np.arange(5,dtype = float)
print(arr)
linspace()函数
通过指定开始值、终值和元素个数来创建一个一维数组,数组的数据元素符合等差数列,可以通过endpoint关键字指定是否包含终值,默认包含终值。
等差数列
numpy.linspace(start,stop,num,endpoint,retstep,dtype)
序号
参数
描述
1
start
起始值
2
stop
结束值
3
num
生成等间隔样例的数量,默认为50
4
endpoint
序列中是否包含stop 值 默认为 Truearr = np.linspace(10,20,9)
print(arr)
arr = np.linspace(10,20,5,endpoint=False)
print(arr)
arr = np.linspace(10,20,5,retstep=True)
print(arr) #返回步长
logspace()函数
和linspace函数类似,不过创建的是等比数列数组。
numpy.logscale(start, stop, num, endpoint, base, dtype)
序号
参数
描述
1
start
起始值是base ** start
2
stop
终止值是base ** stop
3.
num
范围内的数值数量,默认为50
4
endpoint
如果为true,终止值包含在输出数组当中
5
base
对数空间的底数,默认为10
6
dtype
输出数组的数据类型,如果没有提供,则取决于其它参数arr = np.logspace(0,2,5)
# 0表示10的0次方,2表示10的2次方,5表示最终生成元素数量为5
print(arr)
arr1 = np.logspace(1,10,5,base = 2)
print(arr1)
random()函数
使用随机数填充数组,即使用numpy.random中的random()函数来创建0-1之间的随机元素,数组包含的元素数量由参数决定。
序号
参数
描述
1
rand
返回 0 - 1 随机值
2
randn
返回一个样本具有标准正态分布
3
randint
返回随机的整数,位于半开区间[low,hight)size = 10 (3,3)
4
random_integers(low[, high, size])
返回随机的整数,位于闭区间
5
random
返回随机浮点数arr = np.random.rand(9).reshape(3,3)
print(arr)
arr = np.random.rand(3,2,3)
print(arr)
arr = np.random.randn(9).reshape(3,3)
print(arr)
arr = np.random.randn(3,2,3)
print(arr)
arr = np.random.randint(1,9,size = (2,4))
print(arr)
arr = np.random.random_integers(1,9,size =(2,4))
print(arr)
arr = np.random.random((3,2,3))
print(arr)
arr = np.random.randn(3,2,3)
print(arr)
ndarray对象属性
shape
数组的维度。
这个数组属性返回一个包含数组维度的元组,它也可以用于调整数组大小。
a = np.array([[1,2,3],[4,5,6]])
print(a) # [[1 2 3]
#[4 5 6]]
print(a.shape) # (2, 3)
调整数组大小
a = np.array([[1,2,3],[4,5,6]])
a.shape=(3,2)
print(a)
reshape 调整数组大小。
a = np.array([[1,2,3],[4,5,6]])
b = a.reshape(3,2)
print(b)
ndim
数组轴(维度)的个数。
a = np.arange(24)
print(a)
print(a.ndim)
b = a.reshape(2,4,3)
print(b)
print(b.ndim)
print(b.shape)
itemsize
数组中每个元素的字节大小。
#数组的int8 一个字节
x = np.array([1,2,3,4,5], dtype = np.int8)
print(x.itemsize)
数组的float32 4个字节
x = np.array([1,2,3,4,5], dtype = np.float32)
print(x.itemsize)
size
数组元素的总个数,等于shape属性中元组元素的乘积。
arr = np.arange(18).reshape(2,3,3)
print(type(str(arr)))
print(arr.shape)
print(arr.size)
dtype
描述数组中元素类型的对象。
数据类型
类型简写
说明
int_
默认整形
intc
等价于long的整形
int8
i1
字节整形,1个字节,范围:[-128,127]
int16
i2
整形,2个字节,范围:[-32768,32767]
int32
i3
整形,4个字节,范围:[-2^31, 2^31-1]
int64
i4
整形,8个字节,范围:[-2^63, 2^63-1]
uint8
u1
无符号整形, 1个字节, 范围:[0,255]
uint16
u2
无符号整形, 2个字节, 范围:[0,65535]
uint32
u3
无符号整形, 1个字节, 范围:[0, 2^32-1]
uint64
u4
无符号整形, 1个字节, 范围:[0,2^64-1]
bool_
以一个字节形成存储的布尔值(True或者False)
float_
float64简写形式
float16
f2
半精度浮点型(2字节):1符号位+5位指数+10位的小数部分
float32
f4或者f
单精度浮点型(4字节):1符号位+8位指数+23位的小数部分
float64
f8或者d
双精度浮点型(8字节):1符号位+11位指数+52位的小数部分
complex_
c16
complex128的简写形式
complex64
c8
complex128的简写形式
complex128
c16
复数,由两个64位的浮点数来表示
object
O
Python对象类型
String_
S
固定长度的字符串类型(每个字符1个字节),比如:要创建一个长度为8的字符串,应该使用S8
Unicode_
U
固定长度的unicode类型的字符串(每个字符占用字节数由平台决定),长度定义类似String_类型import numpy as np
# 使用数组标量类型
dt = np.dtype(np.int32)
print(dt)
# int8,int16,int32,int64 可替换为等价的字符串 'i1','i2','i4',以及其他。
dt = np.dtype('i4')
print(dt)
结构化数据类型
dt = np.dtype([('age',np.int8)])
print(dt)
#将结构化数据应用于ndarray对象
dt = np.dtype([('age',np.int8)])
a = np.array([(10,),(20,),(30,)],dtype = dt)
print(a)
#访问age列内容
dt = np.dtype([('age','i1')])
a = np.array([(10,),(20,),(30,)],dtype = dt)
print(a['age'])
#结构化数据包含多个字段
student = np.dtype([('name','S20'),('age','i1'),('marks','f4')])
a = np.array([('joe',20,80),('susan',22,85),('tom',23,90),('fank',23,33)],dtype=student)
print(a)
print(a['name'])
每个数据类型都有一个类型代码,即简写方式!
布尔值
符号整数
无符号整数
浮点
复数浮点
时间间隔
日期时间
Python 对象
字节串
Unicode
原始数据(void)
b
i
u
f
c
m
M
O
S\a
U
V
-
python得到多维数组或者图片数组的行数列数
2020-06-09 14:44:12# 输出数组的行和列数 print(x.shape) # (4,5 ) # 只输出行数 print(x.shape[0]) # 4 # 只输出列数 print(x.shape[1]) # 5 2.图片数组 import cv2 img=cv2.imread(r'E:\pythonpycharm\yuan_Faster-RCNN -
Python多维数组索引说明
2021-02-03 20:47:08这意味着x[t]将是一个三维数组,即使{}本身只是一个二维数组。在 注意,在结果的形状(3,3,3)中,前两个{}由高级索引t贡献,最后一个{}由隐式基本索引:贡献。这两个指标t和{}也使用不同的方法得出各自的贡献。来自... -
Python多维数组切片
2020-12-19 11:11:522. list切片类似C数组,多维度分别用”[]“索引,单维度切片用”:“,如:>>> a[[1, 2, 3], [4, 5, 6], [7, 8, 9]]>>> a[1][1:3][5, 6]但是这样做第二个维度索引不起作用:>>> a[1:3][0:... -
python之多维数组(二)
2019-08-01 16:51:19多维数组ndarray访问、修改字段访问、基本切片高级索引Numpy算数运算Numpy矩阵积Numpy广播 ndarray访问、修改 ndarray对象的内容可以通过索引或者切片来访问和修改,就像python的内置容器对象一样。 ndarray对象中的... -
python输出数组中指定元素的所有索引示例
2021-01-21 17:22:14您可能感兴趣的文章:Python操作多维数组输出和矩阵运算示例python读取图片的方式,以及将图片以三维数组的形式输出方法python实现将一个数组逆序输出的方法python中实现将多个print输出合成一个数组Python实现二维... -
python:多维数组变一维数组
2020-12-21 20:43:38python:多维数组变一维数组 b=a.flatten() #将多维数组变为1维数组 具体代码如下: import numpy as np #1.随机生成一个4行3列的多维数组a a=np.random.randn(4,3) print(a) print(type(a)) #输出结果: [[-0.... -
python3 多维数组 NumPy ndarray 简介
2020-07-06 11:16:52多维数组 一维 通用数学函数 基础 NumPy 的主要对象是齐次多维数组。它是一个元素表(通常是元素是数字),其中所有元素类型都相同,元素以正整数元组索引。在 NumPy 维度(dimension)被称为轴(axis)。 ps.... -
python怎么操作多维数组元素
2020-11-29 01:34:35展开全部在Python中,一个像这样的多维表格可以通过“序列的序636f707962616964757a686964616f31333365646263列”实现。一个表格是行的序列。每一行又是独立单元格的序列。这类似于我们使用的数学记号,在数学里我们... -
python多维数组内找指定字符串
2020-12-09 10:15:40遍历这个数组,当然维数不确定的话你就需要使用递归,然后一一判断它的值是否为你指定的值,然后输出索引。另外,建议不要匿名提问,因为这会让很多高手不屑于回答你的问题。追问:能具体帮写一下吗?我试了好多次都... -
python之numpy多维数组
2020-11-27 23:51:31今天就针对多维数组展开来写博客numpy其一部分功能如下:1.ndarray,是具有矢量算术运算且节省空间的多维数组。2.可以用于对整组的数据快速进行运算的辨准数学函数。3.能够用于读写磁盘数据的工具以及用于操作系统... -
Python | 对多维数组进行降维
2021-06-04 09:27:46#变成多维数组 a1 = a.reshape([4, 5]) print(a1) #尝试降维,失败 a2 = a1.reshape(1,20) print(a2) #尝试降维,失败 a3 = a1.reshape(20,1) print(a3) #尝试降维,成功:即reshape函数只需要一个输入量即可。若... -
python学习笔记-多维数组
2020-12-12 19:03:07Python中初始化一个5 x 3每项为0的数组,最好方法是:multilist=[[0forcolinrange(5)]forrowinrange(3)]我们知道,为了初始化一个一维数组,我们可以这样做:alist=[0]*5没错,那我们初始化一个二维数组时,是否可以... -
使用Python中的单维数组进行多维数组索引
2021-01-13 09:40:27另一种选择是多维列表位置索引:import numpy as npncol = 10 # 10 in your casenrow = 500 # 500 in your case# just creating some test data:x = np.arange(ncol*nrow).reshape(nrow,ncol)y = (ncol * np.random.... -
python多维数组切片,行切片列切片,array操作
2021-04-09 11:03:19#函数:用于将多维数组左右拆分成两份 # def DvdArr(arr,n): for i in range(len(a)): for j in range(len(a[0])): a[i][j]=random.random() print("原a数组:") print(a) [b11,b12]=a[:,0:2]#按列切分,从第1... -
Numpy:按多维数组对多维数组排序
2021-03-06 01:22:45它只是指定了输出数组的形状。因此,在您的示例中,您需要告诉numpy,前5个值将从a[0]中提取,后5个值将从a[1]中提取。容易的!在>>> a[[[0]*5,[1]*5],index] 它在N维中变得很复杂,但是让我们对我上面定义的三维... -
Python 初始化多维数组代码
2021-01-15 02:02:32Python中初始化一个5 x 3每项为0的数组,最好方法是:multilist=[[0forcolinrange(5)]forrowinrange(3)]我们知道,为了初始化一个一维数组,我们可以这样做:alist=[0]*5没错,那我们初始化一个二维数组时,是否可以... -
Python numpy多维数组实现原理详解
2020-12-03 13:10:54今天就针对多维数组展开来写博客numpy其一部分功能如下:1.ndarray,是具有矢量算术运算且节省空间的多维数组。2.可以用于对整组的数据快速进行运算的辨准数学函数。3.能够用于读写磁盘数据的工具以及用于操作系统... -
Python查看多维数组List的维度
2020-06-28 16:54:47直接用`len()`函数只能得到最外面一层`[]`的维度。 因此,先把list转成numpy数组,再用numpy数组的`shape`属性获取数组维度。 -
python 显示数组全部元素的方法
2020-12-23 14:54:03您可能感兴趣的文章:在Python中输入一个以空格为间隔的数组方法python分割文件的常用方法python分割列表(list)的方法示例python多维数组切片方法python使用pandas实现数据分割实例代码对Python 数组的切片操作...