如何连接 numpy 数组以创建 2d numpy 数组
How to concatenate numpy arrays to create a 2d numpy array
我正在研究使用 AI 来提高我赢得基诺的几率。 (别笑哈哈)
我的问题是,当我收集数据时,它一次以一维图形数组的形式出现。我有不同的文件,这些文件收集了数据并对其进行了格式化,并对数据集进行了简单的数学运算。现在,我正在尝试为我的神经网络层获取特定形状的数据,但遇到了问题。
formatted_list = file.readlines()
#remove newline chars
formatted_list = list(filter(("\n").__ne__, formatted_list))
#iterate through each drawing, format the ends and split into list of ints
for i in formatted_list:
i = i[1:]
i = i[:-2]
i = [int(j) for j in i.split(",")]
#convert to numpy array
temp = np.array(i)
#t1 = np.reshape(temp, (-1, len(temp)))
#print(np.shape(t1))
#append to master list
master_list.append(temp)
print(np.shape(master_list))
这给出了“(292,)”的输出,这是正确的,有 292 行数据,但它们也包含 20 列。如果我在“#t1 = np.reshape(temp, (-1, len(temp))) #print(np.shape(t1))”中发表评论,它会给出“(1,20)”的输出(1,20)(1,20)(1,20)(1,20)(1,20)(1,20)(1,20)”等。我希望将所有这些行加在一起并且保持列相同 (292,20)。如何实现?
我试过重塑最终列表和许多其他东西,但没有成功。它要么填充行中的每个数字并将其添加到第一个维度,IE (5840,) 我期望能够将每个新绘图附加到主列表,转换为 numpy 数组并将其重塑为 292 行 20列。看起来它只是想保持单一维度。我也试过 numpy.concat 但没有成功。谢谢。
您可以使用 vstack
连接您的 master_list
。
master_list = []
for array in formatted_list:
master_list.append(array)
master_array = np.vstack(master_list)
或者,如果您知道包含数组的 formatted_list
的长度和数组长度,您可以预先分配 master_array
.
import numpy as np
formatted_list = [np.random.rand(20)]*292
master_array = np.zeros((len(formatted_list), len(formatted_list[0])))
for i, array in enumerate(formatted_list):
master_array[i,:] = array
** 编辑 **
正如 hpaulj 在评论中提到的,np.array()
、np.stack()
和 np.vstack()
使用此输入并生成了一个形状为 (7,20) 的 numpy 数组。
我正在研究使用 AI 来提高我赢得基诺的几率。 (别笑哈哈) 我的问题是,当我收集数据时,它一次以一维图形数组的形式出现。我有不同的文件,这些文件收集了数据并对其进行了格式化,并对数据集进行了简单的数学运算。现在,我正在尝试为我的神经网络层获取特定形状的数据,但遇到了问题。
formatted_list = file.readlines()
#remove newline chars
formatted_list = list(filter(("\n").__ne__, formatted_list))
#iterate through each drawing, format the ends and split into list of ints
for i in formatted_list:
i = i[1:]
i = i[:-2]
i = [int(j) for j in i.split(",")]
#convert to numpy array
temp = np.array(i)
#t1 = np.reshape(temp, (-1, len(temp)))
#print(np.shape(t1))
#append to master list
master_list.append(temp)
print(np.shape(master_list))
这给出了“(292,)”的输出,这是正确的,有 292 行数据,但它们也包含 20 列。如果我在“#t1 = np.reshape(temp, (-1, len(temp))) #print(np.shape(t1))”中发表评论,它会给出“(1,20)”的输出(1,20)(1,20)(1,20)(1,20)(1,20)(1,20)(1,20)”等。我希望将所有这些行加在一起并且保持列相同 (292,20)。如何实现?
我试过重塑最终列表和许多其他东西,但没有成功。它要么填充行中的每个数字并将其添加到第一个维度,IE (5840,) 我期望能够将每个新绘图附加到主列表,转换为 numpy 数组并将其重塑为 292 行 20列。看起来它只是想保持单一维度。我也试过 numpy.concat 但没有成功。谢谢。
您可以使用 vstack
连接您的 master_list
。
master_list = []
for array in formatted_list:
master_list.append(array)
master_array = np.vstack(master_list)
或者,如果您知道包含数组的 formatted_list
的长度和数组长度,您可以预先分配 master_array
.
import numpy as np
formatted_list = [np.random.rand(20)]*292
master_array = np.zeros((len(formatted_list), len(formatted_list[0])))
for i, array in enumerate(formatted_list):
master_array[i,:] = array
** 编辑 **
正如 hpaulj 在评论中提到的,np.array()
、np.stack()
和 np.vstack()
使用此输入并生成了一个形状为 (7,20) 的 numpy 数组。