Python 如何使用列表项中的numpy创建NxM阵列/矩阵
我有一个包含以下数字的文件Python 如何使用列表项中的numpy创建NxM阵列/矩阵,python,numpy,matrix,Python,Numpy,Matrix,我有一个包含以下数字的文件 AAFF ADFF 7689 7FAD AAFF ADFF 7689 7FAD ... and so on for 200 lines of the file 我想用numpy创建两个矩阵。矩阵1将有第8行和第1列(这将使用文件中的前8行数据),矩阵2将有8x8形状(这将使用文件中接下来的64行数据) 目前,我已将数字保存在列表中,并使用函数创建矩阵1。我如何使用numpy实现这一点 这是我用来创建矩阵1的函数 def createMatrix(rowCount,
AAFF
ADFF
7689
7FAD
AAFF
ADFF
7689
7FAD
... and so on for 200 lines of the file
我想用numpy创建两个矩阵。矩阵1将有第8行和第1列(这将使用文件中的前8行数据),矩阵2将有8x8形状(这将使用文件中接下来的64行数据)
目前,我已将数字保存在列表中,并使用函数创建矩阵1。我如何使用numpy实现这一点
这是我用来创建矩阵1的函数
def createMatrix(rowCount, colCount, dataList):
mat = []
for i in range (rowCount):
rowList = []
for j in range (colCount):
if dataList[j] not in mat:
rowList.append(dataList[i])
mat.append(rowList)
return mat
我可以修改此函数以创建8x8矩阵吗?还是在努比会更简单 您可以从列表中创建一个简单数组并对其进行重塑:
import numpy as np
import random
random.seed(42)
d = "0123456789ABCDEF"
data = [''.join(random.choices(d, k = 4)) for _ in range(72)]
print(data)
first8, next64 = data[:8],data[8:8+64]
farr = np.array(first8)
arr = np.array(next64).reshape( (8,8))
print(farr)
print(arr)
输出:
# random data
['A043', 'BAE1', '6038', '03A8', '39C0', 'CB52', 'F511', 'D9CB', '8F68', 'D9D9',
'B034', '1314', 'A553', '4EA9', '2B26', 'FA8A', 'DC30', '543F', 'E5A6', 'E743',
'849E', '63F8', '101A', 'C616', 'F8FD', '0BA8', '4A16', '7FE4', '82ED', '4A92',
'C8C8', '050E', 'ED40', 'EF17', '1CC2', '784D', '638B', '34FA', '7813', '5933',
'1A3E', 'D13A', '32E9', '7CC3', '1667', 'BAF1', '65D3', '3764', '3E7D', '80FD',
'FED2', '7360', '6F4C', '76FF', '8B24', 'F98B', '098D', '2F12', '9A31', 'E399',
'698E', '3B36', 'A45C', '17FF', '134E', 'EE52', 'DB9F', 'A0D4', 'AF21', '1849',
'B3A4', '7ED1']
# arrays from first 8
['A043' 'BAE1' '6038' '03A8' '39C0' 'CB52' 'F511' 'D9CB']
# array reshaped to (8,8)
[['8F68' 'D9D9' 'B034' '1314' 'A553' '4EA9' '2B26' 'FA8A']
['DC30' '543F' 'E5A6' 'E743' '849E' '63F8' '101A' 'C616']
['F8FD' '0BA8' '4A16' '7FE4' '82ED' '4A92' 'C8C8' '050E']
['ED40' 'EF17' '1CC2' '784D' '638B' '34FA' '7813' '5933']
['1A3E' 'D13A' '32E9' '7CC3' '1667' 'BAF1' '65D3' '3764']
['3E7D' '80FD' 'FED2' '7360' '6F4C' '76FF' '8B24' 'F98B']
['098D' '2F12' '9A31' 'E399' '698E' '3B36' 'A45C' '17FF']
['134E' 'EE52' 'DB9F' 'A0D4' 'AF21' '1849' 'B3A4' '7ED1']]
您可以对普通python列表执行相同的操作,而不使用numpy:
# skip first 8 - then take slices of size 8 from the original list
plain = [ data[8+i:8+i+8] for i in range(0,64,8)]
print(plain)
[['8F68', 'D9D9', 'B034', '1314', 'A553', '4EA9', '2B26', 'FA8A'],
['DC30', '543F', 'E5A6', 'E743', '849E', '63F8', '101A', 'C616'],
['F8FD', '0BA8', '4A16', '7FE4', '82ED', '4A92', 'C8C8', '050E'],
['ED40', 'EF17', '1CC2', '784D', '638B', '34FA', '7813', '5933'],
['1A3E', 'D13A', '32E9', '7CC3', '1667', 'BAF1', '65D3', '3764'],
['3E7D', '80FD', 'FED2', '7360', '6F4C', '76FF', '8B24', 'F98B'],
['098D', '2F12', '9A31', 'E399', '698E', '3B36', 'A45C', '17FF'],
['134E', 'EE52', 'DB9F', 'A0D4', 'AF21', '1849', 'B3A4', '7ED1']]
答案取决于:这些是十六进制数吗?如果是这样的话,您希望如何将它们存储在base 10中?您的文件类型是什么,.csv文件?@Ehsan。在内部,这些数字存储为数字。@dipk11。不要使用np.matrix,它已被弃用。非常感谢..我使用了带有numpy的一个,因为第二个解决方案没有给我正确的矩阵。这里有一个问题,如果我想为整个文件循环创建这些矩阵,该怎么办?行和列将是相同的->(8,1)和(8,8)@dipk11循环是什么意思?有200行,取8+64=72,这不是平均分割。您可以对范围内的增量(0200,72)执行类似于
的操作:
然后使用first8,next64=data[delta:delta+8],data[delta+8:delta+8+64]
并在for循环内生成数组。等等,我想你会明白的。