我试图选择名为matrix
的numpy矩阵中的所有行,其形状为(25323, 9)
,其中第一列的值在列表range_tuple
上每个元组的start
和end
范围内。最后,我想创建一个新的numpy矩阵,其结果是final
的形状为(n, 9)
。以下代码返回此错误:TypeError: only integer scalar arrays can be converted to a scalar index
。我也尝试过用numpy.zeros((1,9))
初始化final
并使用np.concatenate
,但得到了类似的结果。当我使用final.append(result)
而不是使用np.concatenate
时,确实会得到一个编译结果,但是矩阵的形状会丢失。我知道这个问题有一个合适的解决方案,任何帮助都将不胜感激
final = []
for i in range_tuples:
copy = np.copy(matrix)
start = i[0]
end = i[1]
result = copy[(matrix[:,0] < end) & (matrix[:,0] > start)]
final = np.concatenate(final, result)
final = np.matrix(final)
核对清单;注意元素的形状不同;有些是1行或0行。测试这些边缘情况是个好主意
vstack
加入他们:这里
concatenate
也起作用,因为默认轴为0,并且所有输入都已经是二维的试试下面的方法
第一个是将
final
初始化为numpy数组。连接的第一个参数必须是数组的python列表,请参见docs。在代码中,它将result
变量解释为参数axis
的值注释
result
始终具有相同的长度,则最终结果可以通过reshaping获得李>我只需要创建一个布尔掩码来选择满足所需条件的行
编辑:我没有注意到您正在使用
matrix
(与ndarray
相反)。答案已编辑为matrix
假设以下输入数据:
然后,首先,我将
range_tuple
转换为numpy.ndarray
:现在,创建遮罩:
应用遮罩:
检查:
如果
range_tuple
的长度与matrix
中的行数不同,则执行以下操作:相关问题 更多 >
编程相关推荐