java速学教程(入门到精通)
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
java中如何打乱二维数组的行?这是许多开发者经常遇到的问题。打乱二维数组的行可以通过使用collections类中的shuffle()方法来实现。该方法可以随机打乱集合中的元素顺序。首先,我们需要将二维数组转换为list形式,然后再使用shuffle()方法对列表进行随机排序。最后,将列表转换回二维数组即可完成行的打乱。这种方法简单易行,能够有效地打乱二维数组的行,为开发者提供了更灵活的数据处理方式。
我编写了一些代码来读取 csv 文件并进行一些数据预处理,然后它应该对 2d 数组的行而不是列进行洗牌,尽管其顺序无法更改。
我遇到的问题是它确实会打乱 2d 数组的行和列,但我不知道如何修复它。
import java.io.*; import java.nio.file.paths; import java.util.*; public class randomforest { public static void shuffle2darray() { int numrows = allfeatures.length; list<integer> indices = new arraylist(); // populate the list with indices for (int i = 0; i <p>还有其他方法,如您所见,但仅此 shuffle2darray() 方法就可以正常工作。</p> <p>这样我就可以将数据随机分为 10 份,以便我可以进行 10 份交叉验证</p> <p>我确实尝试将 print 语句放入代码中,并尝试在尝试洗牌之前和之后检查 2d 数组,然后检查 csv 文件以确保该行的顺序正确。</p> <p>这是过滤前的小示例:</p> <table class="s-table"> <thead><tr> <th>cpi_9606.ensp00000000233</th> <th>cpi_9606.ensp00000000412</th> <th>cpi_9606.ensp00000000442</th> <th>cpi_9606.ensp00000001008</th> <th>cpi_9606.ensp00000001146</th> <th>cpi_9606.ensp00000002165</th> <th>cpi_9606.ensp00000002829</th> <th>cpi_9606.ensp00000003084</th> <th>cpi_9606.ensp00000003100</th> </tr></thead> <tbody> <tr> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> </tr> <tr> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> </tr> <tr> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>180</td> </tr> </tbody> </table> <p>过滤和打乱列后:</p> <table class="s-table"> <thead><tr> <th>cpi_9606.ENSP00000000442</th> <th>cpi_9606.ENSP00000001008</th> <th>cpi_9606.ENSP00000003084</th> <th>cpi_9606.ENSP00000003100</th> <th>cpi_9606.ENSP00000005178</th> <th>cpi_9606.ENSP00000011292</th> <th>cpi_9606.ENSP00000011653</th> <th>cpi_9606.ENSP00000012443</th> <th>cpi_9606.ENSP00000013034</th> <th>cpi_9606.ENSP00000014930</th> </tr></thead> <tbody> <tr> <td>0</td> <td>900</td> <td>0</td> <td>0</td> <td>0</td> <td>900</td> <td>0</td> <td>0</td> <td>0</td> <td></td> </tr> <tr> <td>900</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>928</td> <td>900</td> <td>338</td> <td></td> </tr> <tr> <td>322</td> <td>236</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td></td> </tr> </tbody> </table> <h2 class="daan">解决方法</h2> <p>您的代码片段未能包含关键元素:您想要排序的数组。</p> <p>所以,在黑暗中进行一次疯狂的尝试,我猜它看起来像这样:</p> <pre class="brush:php;toolbar:false;">int[][] allfeatures = ....;
要洗牌,它是一个衬垫。您可以放弃您拥有的所有代码:
collections.shuffle(arrays.aslist(allfeatures));
那么,为什么这会起作用?
因为不存在二维数组这样的东西。 java 根本没有它们。
您拥有的 int[][] allfeatures
不是二维数组。它是一个一维数组,其组件类型为 int 数组。因此, arrays.aslist(allfeatures)
非常好,因为您有一个对象数组(不是基元) - 每个对象都是一个 int 数组。该表达式的类型为 list<int></int>
。
arrays.aslist
返回一个仍然由底层数组支持的列表。因此, .set()
有效,但 .add()
无效(因为数组可以更改其元素,但不能增长或缩小)。 collections.shuffle
可以打乱任何列表,并且仅使用 .set
和 .get
来执行此操作: arrays.aslist
支持的操作就很好。
这一切的结果是,这将重新调整 allfeatures
本身。
如果你想保持allfeatures
不变,请先克隆:
int[][] clone = allFeatures.clone(); Collections.shuffle(Arrays.asList(clone));
Java免费学习笔记:立即学习
解锁 Java 大师之旅:从入门到精通的终极指南
已抢7215个
抢已抢94862个
抢已抢14828个
抢已抢52097个
抢已抢194768个
抢已抢87281个
抢