Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用列表项中的numpy创建NxM阵列/矩阵_Python_Numpy_Matrix - Fatal编程技术网

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循环内生成数组。等等,我想你会明白的。