Python中使用Numpy随机删除数组元素:ValueError: a must be 1-dimensional解决方案
Python中使用Numpy随机删除数组元素:ValueError: a must be 1-dimensional解决方案
在使用 np.random.choice() 函数从二维数组中随机选择元素时,你可能会遇到 ValueError: a must be 1-dimensional 错误。这个错误提示你输入的数组必须是一维的,而你提供的是二维数组。
错误原因:
np.random.choice() 函数用于从给定的一维数组中随机选择元素。当你将 np.where(physicalNetwork > 0) 的结果作为参数传递给 np.random.choice() 时,实际上你传递的是一个二维数组,因为 np.where() 返回的是满足条件的元素的索引,而二维数组的索引是二维的。
解决方案:
为了解决这个问题,我们需要将二维数组转换为一维数组。可以使用 np.where()[0] 获取满足条件的元素的一维索引数组,或者使用 np.flat 将二维数组展平为一维数组。
以下代码展示了如何修改你的代码以解决此错误:pythonimport numpy as npimport pandas as pdfrom collections import dequeimport heapq
读取网络数据logicalNetwork = pd.read_excel('逻辑网络1.xls', header=None).to_numpy()physicalNetwork = pd.read_excel('物理网络1.xls', header=None).to_numpy()
获取网络的节点数num_nodes = logicalNetwork.shape[0]
用于存储已经存在的路径existing_paths = set()
随机删除6条物理路径np.random.seed(0)
方法一:使用 np.where()[0] 获取一维索引数组deleted_paths = np.random.choice(np.where(physicalNetwork > 0)[0], size=6, replace=False)
方法二:使用 np.flat 将二维数组展平为一维数组# deleted_paths = np.random.choice(physicalNetwork.flat[np.where(physicalNetwork > 0)], size=6, replace=False)
for path in deleted_paths: physicalNetwork[np.unravel_index(path, physicalNetwork.shape)] = 0
以下省略部分代码...
代码解释:
- 方法一 使用
np.where(physicalNetwork > 0)[0]获取满足条件physicalNetwork > 0的元素的一维索引数组,然后将其传递给np.random.choice()函数。* 方法二 使用physicalNetwork.flat将二维数组physicalNetwork展平为一维数组,然后使用np.where(physicalNetwork > 0)获取满足条件的元素的索引,最后使用这些索引从展平后的数组中选择元素。
选择哪种方法取决于你的实际需求和代码风格。两种方法都可以有效解决 ValueError: a must be 1-dimensional 错误,并让你能够使用 np.random.choice() 函数从二维数组中随机选择元素。
原文地址: https://www.cveoy.top/t/topic/UpR 著作权归作者所有。请勿转载和采集!