Thank you. Indeed it is a problem of packing. However the two matrices do not differ in the sense that one has symbols, or a mix of floats and integers. They are both rectangular and all their elements are positive integers. For illustration I added the sample code below. Indeed, after packing pd has the same byte count as m. After transposition the byte count of pd decreases to almost half, although the transposed pd is still unpacked. My real problem is, I see now, that, during construction, before packing, matrices like pd become very large and the computer runs out of memory. What I really need is pd to be small, packed even during construction. It still puzzles me why there are are necessary 40-50 bytes per element for storage.
In[1]:= Needs["Developer`"]
m = 5; n = 7; r = 4;
pl = Flatten[Table[{i, j}, {i, r}, {j, i}], 1];
pu = Flatten[Table[{i, j}, {i, r}, {j, i + 1, r}], 1];
nl = r (r + 1)/2; nu = r (r - 1)/2;
pdd = Flatten[
Table[ConstantArray[{(i - 1) r, (j - 1) r}, nl] + pl, {i, r}, {j,
i}], 2];
pds = Flatten[
Table[ConstantArray[{(i - 1) r, (j - 1) r}, nu] + pu, {i, r}, {j,
i}], 2];
pd = Flatten[{Table[r^2 (j - 1) + pdd, {j, n}],
Table[ConstantArray[{r^2 j, r^2 (j - 1)}, nl nu] + pds, {j,
n - 1}]}, 2];
In[9]:= Dimensions[pd]
Out[9]= {1060, 2}
In[10]:= ByteCount[pd]
Out[10]= 80936
In[11]:= 80936/(1060 2) // N
Out[11]= 38.1774
In[12]:= Max[pd]
Out[12]= 112
In[13]:= m = Table[RandomInteger[111] + 1, {i, 1060}, {j, 2}];
ByteCount[m]
Out[14]= 9304
In[15]:= 9304/(1060 2) // N
Out[15]= 4.38868
In[16]:= PackedArrayQ[pd]
Out[16]= False
In[17]:= PackedArrayQ[m]
Out[17]= True
In[18]:= pdpack = ToPackedArray[pd];
ByteCount[pdpack]
Out[19]= 9304
In[25]:= boo = True;
Do[boo = boo \[And] Head[pd[[i, j]]] == Integer, {i, 1060}, {j, 2}]
boo
Out[27]= True
In[28]:= boo = True;
Do[boo = boo \[And] Head[m[[i, j]]] == Integer, {i, 1060}, {j, 2}]
boo
Out[30]= True
In[31]:= pdtr = Transpose[pd];
ByteCount[pdtr]
Out[32]= 43192
In[33]:= PackedArrayQ[pdtr]
Out[33]= False