矩阵的转置就是行转列。例如:
[
1
2
3
4
]
\left[ \begin{matrix} 1 & 2\\ 3 & 4 \end{matrix} \right]
[1324]
转置后变成了
[
1
3
2
4
]
\left[ \begin{matrix} 1 & 3\\ 2 & 4 \end{matrix} \right]
[1234]
Java 代码非常简单:
public Matrix<T> transpose() {
int columns = array[0].length;
int lines = array.length;
final T[][] ts = newArray(columns, lines);
for (int i = 0; i < ts.length; i++) {
for (int j = 0; j < ts[i].length; j++) {
ts[i][j] = array[j][i];
}
}
try {
final Constructor<? extends Matrix> constructor = this.getClass().getConstructor(ts.getClass());
return constructor.newInstance((Object) ts);
} catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
throw new RuntimeException(e);
}
}
这里有个细节,newInstance里的参数需要强转为Object。
Python代码更简单
def transpose(self):
arr = [[0]] * len(self.__lines[0])
# 里面不能是同一个数组
for i in range(len(arr)):
arr[i] = [0] * len(self.__lines)
for (i, x) in enumerate(self.__lines):
for (j, y) in enumerate(x):
arr[j][i] = y
return arr
但是细节是,不能用同一个数组。