如何使用布爾元素生成矩陣,但每行的總和等於某個常數。Matlab使用隨機元素生成矩陣
回答
比方說,你想有20列(n=20
)和你的載體a
包含您每行中希望的人的數量:
n=20;
a= [5 6 1 9 4];
X= zeros(numel(a),n);
for k=1:numel(a)
rand_order=randperm(n);
row_entries=[ones(1,a(k)),zeros(1,n-a(k))];
row_entries=row_entries(rand_order);
X(k,:)=row_entries;
end
X=boolean(X);
我做的是生成一個隨機排序索引數組rand_order
,然後得到一個數組,其中包含所需數量的零填充。根據rand_order
將這些元素重新排序並保存並將其轉換爲邏輯。而且由於使用的for循環rand_order
的是所有的時間再次計算,所以讓你的輸出不同的地點:
1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 0
0 0 0 1 0 0 0 1 1 0 1 0 0 0 0 0 1 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
1 0 0 1 0 1 1 0 1 0 0 1 1 0 0 0 1 1 0 0
1 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
你的方法的作品!謝謝 – 2014-08-28 11:23:05
你錯過了一個編輯。將該轉換置於循環外的布爾值。否則,你每次都這樣做。還要檢查一下Dan的解決方案,該解決方案沒有任何循環(對於大矩陣來說可能更快) – 2014-08-28 11:24:54
每一行都是相同的一個數字嗎?
k = 5;
m = 10;
n = 10;
[~, I] = sort(rand(m,n), 2)
M = I <= k
如果你不希望相同數量的1
s分別排,而是有你想要多少1
當時的你需要使用bsxfun
以及矢量每行指定:
K = (1:10)'; %//'
m = 10;
n = 10;
[~, I] = sort(rand(m,n), 2)
M = bsxfun(@ge, K,I)
偉大的解決方案。這個問題似乎很難矢量化 – 2014-08-28 11:37:30
- 1. 矩陣的Matlab隨機元素
- 2. Matlab - 爲矩陣生成隨機座標
- 3. 使用錯誤生成隨機矩陣
- 4. 生成具有獨立元素的隨機矩陣
- 5. 矩陣生成MATLAB
- 6. Matlab生成矩陣
- 7. 生成一個隨機矩陣
- 8. R中的隨機生成矩陣
- 9. RAS算法生成隨機矩陣
- 10. 如何生成對稱隨機矩陣?
- 11. Matlab矩陣元素檢查
- 12. 使用MATLAB生成隨機多項式
- 13. 使用matlab條件生成隨機數
- 14. 從矩陣生成的矩陣與Matlab生成的Python圖形
- 15. 如何使用Python生成隨機N維旋轉矩陣?
- 16. 生成一個具有N個非零元素的隨機稀疏矩陣
- 17. MATLAB生成隨機數
- 18. MATLAB - 生成隨機向量
- 19. 獲取隨機生成元素的ID
- 20. 如何在MATLAB中生成可變大小的隨機值矩陣?
- 21. 如何生成隨機3D圖並在matlab中顯示其相鄰矩陣
- 22. [matlab]使用協方差矩陣創建隨機高斯變量
- 23. 在for循環中用genweb生成隨機矩陣
- 24. 隨機產生正交3×3矩陣
- 25. 如何重複元素矩陣在MATLAB
- 26. Matlab:元素3D矩陣乘法
- 27. Matlab基於元素的矩陣乘法
- 28. 在Matlab中修改矩陣元素
- 29. 如何生成在MATLAB這個矩陣
- 30. Matlab的遞歸函數生成矩陣
我認爲你可以嘗試生成隨機元素的矩陣。然後按行進行排序並將最大的n個元素設置爲true,將其他元素設置爲false。這會給每一行總和n。 – patrik 2014-08-28 11:04:45
@RTL類似的問題,但鏈接的問題沒有一個接受的答案,這一個是「更容易」,因爲你沒有專欄的特定約束。 – 2014-08-28 11:40:08
@Shai我不知道這是否應該標記爲重複,因爲目前提供的答案非常類似的問題不起作用... – Dan 2014-09-02 06:02:33