如何正确初始化Numpy二维数组并垂直追加行数据?
解决Numpy追加SQL行数据的维度不匹配问题
错误原因很明确:你初始化的table_array是2维数组(形状(0,9)),但cursor.fetchone()返回的row是1维的元组/数组,直接用numpy.append指定axis=0时,两者维度不兼容,触发了维度不匹配的报错。
下面两种方法可以解决这个问题:
方法一:将单行数据转为2维数组后再追加
把每次获取的1维行数据,转换成形状为(1,9)的2维数组,和原数组维度对齐后再追加:
import numpy as np sql_query = "select top 100 Passed, f.ID, Yld, Line, Location, Type, Name, ErrorID, Site from dw.table1 f join dw.table2 d on f.ID = d.ID where Type like '%test%'" table_array = np.empty((0, 9)) cursor.execute(sql_query) row = cursor.fetchone() while row: # 把1维的row转为2维数组(新增一个行维度) row_2d = np.array(row)[np.newaxis, :] table_array = np.append(table_array, row_2d, axis=0) row = cursor.fetchone()
方法二:先收集所有行到列表,再一次性转成Numpy数组(更推荐)
Numpy数组每次追加都会重新分配内存、复制数据,数据量大时性能很差。先把所有行存到普通列表里,最后再转成2维数组,效率更高:
import numpy as np sql_query = "select top 100 Passed, f.ID, Yld, Line, Location, Type, Name, ErrorID, Site from dw.table1 f join dw.table2 d on f.ID = d.ID where Type like '%test%'" cursor.execute(sql_query) rows_list = [] row = cursor.fetchone() while row: rows_list.append(row) row = cursor.fetchone() # 列表转成2维Numpy数组 table_array = np.array(rows_list)
内容的提问来源于stack exchange,提问作者Mich
相关产品推荐
相关产品推荐

