Yeah, the docs are useless. I'll try to answer based on my understanding from testing.
First, the properties on a bpy.types.Bone aren't affected by the Pose mode pose. Properties affected by the pose are on the bpy.types.PoseBone. So everything in bpy.types.Bone should depends only on the rest pose (the edit mode pose)
bone.matrix_local
is the transform from bone space to armature space, calculated in the rest pose.
bone.matrix
is the transform from bone space to its parent bone's space (or armature space if no parent) in the rest pose, but without the translation. The columns are bone.x_axis
, bone.y_axis
, bone.z_axis
, which are the bone's x-axis, y-axis, and z-axis in its parent's coordinate space.
They seem to be related by
bone.matrix = (bone.parent.matrix_local.inverted() @ bone.matrix_local).to_3x3()
If it's rotation mode is quaternion, then how 4 numbers fit in the 3-number row?
That's not how it works. In both quaternion and euler mode, the rotation is used to calculate a 3x3 matrix that performs the rotation when applied to a vector. The numbers are never just inserted into a row of the matrix.