ffill
теперь имеет свой собственный метод pd.DataFrame.ffill
df.ffill()
0 1 2
0 1.0 2.0 3.0
1 4.0 2.0 3.0
2 4.0 2.0 9.0
Существует два хороших способа копирования массива - использовать клон и System.arraycopy()
.
Вот как использовать клон для 2D-случая:
int [][] myInt = new int[matrix.length][];
for(int i = 0; i < matrix.length; i++)
myInt[i] = matrix[i].clone();
Для системы. arraycopy (), вы используете:
int [][] myInt = new int[matrix.length][];
for(int i = 0; i < matrix.length; i++)
{
int[] aMatrix = matrix[i];
int aLength = aMatrix.length;
myInt[i] = new int[aLength];
System.arraycopy(aMatrix, 0, myInt[i], 0, aLength);
}
У меня нет теста, но я могу поспорить с моими 2 центами, что они быстрее и меньше склонны к ошибкам , чем делают это сам. Особенно, System.arraycopy()
, поскольку он реализован в собственном коде.
Надеюсь, это поможет.
Изменить: исправлена ошибка.
Вы не инициализируете локальный 2D-массив.
int[][] myInt = new int[matrix.length][];
for(int i = 0; i < matrix.length; i++)
{
myInt[i] = new int[matrix[i].length];
for (int j = 0; j < matrix[i].length; j++)
{
myInt[i][j] = matrix[i][j];
}
}
Можно использовать потоки в Java 8 для копирования 2D-массива.
@Test
public void testCopy2DArray() {
int[][] data = {{1, 2}, {3, 4}};
int[][] dataCopy = Arrays.stream(data)
.map((int[] row) -> row.clone())
.toArray((int length) -> new int[length][]);
assertNotSame(data, dataCopy);
assertNotSame(data[0], dataCopy[0]);
assertNotSame(data[1], dataCopy[1]);
dataCopy[0][1] = 5;
assertEquals(2, data[0][1]);
assertEquals(5, dataCopy[0][1]);
}
Arrays.stream(data).map(int[]::clone).toArray(int[][]::new);
. Но обратите внимание, что для огромных массивов native System.arraycopy должен быть (возможно?) Быстрее, если только вы parallel()
не используете ваш поток.
– NIA
3 October 2016 в 11:55
вы можете так же кодировать myInt = matrix.clone ();